2013-05-26 10 views
6

Sono un principiante in ASP.NET quindi ho alcune domande su come prevenire l'SQL injection in ASP.NET. Il mio linguaggio di programmazione è VB.NET, non C#, e sto usando Microsoft Access come database.Prevenzione dell'iniezione SQL con Microsoft Access e VB.NET

Le mie domande sono:

  1. Come proteggere il mio database da SQL injection?
  2. Ho letto messaggi da altri forum e hanno detto che utilizzavano i parametri con stored procedure, i parametri con SQL dinamico. Possono essere implementati in un database di Microsoft Access?
+0

funziona questo aiuto? ... SQL injection nel database di MS-Access [duplicato] http://stackoverflow.com/questions/9392330/sql-injection-in-ms-access-database ... – Chris

+0

Credo che sia necessario leggere e passare dall'argomento http://msdn.microsoft.com/en-us/library/aa139977(office.10).aspx – Aristos

+0

@Chris voglio solo proteggere il mio database da SQL injection, quindi, quando i dati di inserimento dell'utente nella casella di testo, si assume che sia log-in, casella di testo del nome utente mentre il testo della voce utente ', è possibile gestire un errore – NPE

risposta

2

Ecco un esempio molto semplice ASP.NET utilizzando una query con parametri via OleDb in VB.NET:

Default.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 

Note:

  • La query con parametri utilizza "?" invece di nomi "reali" per i parametri perché Access OLEDB ignora i nomi dei parametri. I parametri devono essere definiti nell'ordine esatto in cui appaiono nello OleDbCommand.CommandText.

  • La tabella [UsersTable] ha una chiave primaria AutoNumber e SELECT @@IDENTITY recupera il nuovo valore di chiave creato dall'istruzione INSERT INTO.