【问题标题】:SQL Injection prevention with Microsoft Access and VB.NET使用 Microsoft Access 和 VB.NET 预防 SQL 注入
【发布时间】:2013-05-21 12:05:39
【问题描述】:

我是 ASP.NET 的初学者,所以我对如何防止 ASP.NET 中的 SQL 注入有一些疑问。我的编程语言是 VB.NET,而不是 C#,我使用 Microsoft Access 作为我的数据库。

我的问题是:

  1. 如何保护我的数据库免受 SQL 注入?
  2. 我一直在阅读其他论坛的帖子,他们说使用 带有存储过程的参数,带有动态 SQL 的参数。它们可以在 Microsoft Access 数据库中实现吗?

【问题讨论】:

  • 我相信你需要阅读并传递该主题msdn.microsoft.com/en-us/library/aa139977(office.10).aspx
  • @Chris 我只是想保护我的数据库免受 sql 注入,所以当用户在文本框中输入数据时,假设它是登录表单,用户输入文本时的用户名文本框,可以处理错误

标签: asp.net vb.net visual-studio-2008 ms-access sql-injection


【解决方案1】:

这是一个非常简单的 ASP.NET 示例,它在 VB.NET 中通过 OleDb 使用 参数化查询

默认.aspx

<%@ Page Title="Home Page" Language="vb" MasterPageFile="~/Site.Master" AutoEventWireup="false"
    CodeBehind="Default.aspx.vb" Inherits="vbOleDbSite._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <p>
        First Name: <asp:TextBox ID="FirstName" runat="server"></asp:TextBox><br />
        Last Name: <asp:TextBox ID="LastName" runat="server"></asp:TextBox><br />
        &nbsp;<br />
        <asp:Button ID="btnAddUser" runat="server" Text="Add User" />
        &nbsp;<br />
        Status: <span id="spanStatus" runat="server">Awaiting submission...</span>
    </p>
</asp:Content>

默认.aspx.vb

Public Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    Protected Sub btnAddUser_Click(sender As Object, e As EventArgs) Handles btnAddUser.Click
        Dim newID As Long = 0
        Using con As New OleDb.OleDbConnection
            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\__tmp\testData.accdb;"
            con.Open()
            Using cmd As New OleDb.OleDbCommand
                cmd.Connection = con
                cmd.CommandText = "INSERT INTO UsersTable (LastName, FirstName) VALUES (?, ?);"
                cmd.Parameters.AddWithValue("?", Me.LastName.Text)
                cmd.Parameters.AddWithValue("?", Me.FirstName.Text)
                cmd.ExecuteNonQuery()
            End Using
            Using cmd As New OleDb.OleDbCommand
                cmd.Connection = con
                cmd.CommandText = "SELECT @@IDENTITY"
                newID = cmd.ExecuteScalar()
            End Using
            con.Close()
        End Using
        Me.spanStatus.InnerText = "User """ & Me.FirstName.Text & " " & Me.LastName.Text & _
                """ has been added (ID: " & newID.ToString() & ")."
    End Sub
End Class

注意事项:

  • 参数化查询使用“?”而不是参数的“真实”名称,因为 Access OLEDB 忽略参数名称。参数必须按照它们在OleDbCommand.CommandText中出现的确切顺序定义。

  • [UsersTable] 表有一个AutoNumber 主键,SELECT @@IDENTITY 检索INSERT INTO 语句创建的新键值。

【讨论】:

    猜你喜欢
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2017-12-17
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多