gpt4 book ai didi

asp.net - 使用 Microsoft Access 和 VB.NET 预防 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-12-03 21:42:03 25 4
gpt4 key购买 nike

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

我的问题是:

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

    这是一个非常简单的 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 创建的新键值陈述。
  • 关于asp.net - 使用 Microsoft Access 和 VB.NET 预防 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16759516/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com