6

私は ASP.NET の初心者なので、ASP.NET で SQL インジェクションを防ぐ方法についていくつか質問があります。私のプログラミング言語は C# ではなく VB.NET で、データベースとして Microsoft Access を使用しています。

私の質問は次のとおりです。

  1. データベースを SQL インジェクションから保護する方法は?
  2. 私は他のフォーラムからの投稿を読んでいて、ストアド プロシージャでパラメーターを使用し、動的 ​​SQL でパラメーターを使用すると述べています。Microsoft Access データベースに実装できますか?
4

1 に答える 1

2

VB.NET で OleDb を介してパラメーター化されたクエリを使用する非常に単純な ASP.NET の例を次に示します。

デフォルト.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>

Default.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-05-26T15:45:40.653 に答える