2013-05-26 13 views
6

Jestem początkującym programistą ASP.NET, więc mam kilka pytań dotyczących zapobiegania iniekcji SQL w ASP.NET. Mój język programowania to VB.NET, a nie C#, i używam Microsoft Access jako mojej bazy danych.Zapobieganie iniekcjom SQL za pomocą Microsoft Access i VB.NET

Moje pytania są następujące:

  1. Jak chronić swoje bazy danych z SQL injection?
  2. Czytałem posty z innych forów i powiedzieli przy użyciu parametrów przechowywanych z parametrami z dynamicznym SQL, używając parametrów . Czy można je zaimplementować w bazie danych Microsoft Access?
+0

Czy to pomoże? ... SQL injection w bazie danych MS Access [Duplikat] http://stackoverflow.com/questions/9392330/sql-injection-in-ms-access-database ... – Chris

+0

Uważam, że musisz przeczytać i przejść z tego tematu http://msdn.microsoft.com/en-us/library/aa139977(office.10).aspx – Aristos

+0

@ Chciałem tylko chronić moją bazę danych przed iniekcją sql, więc gdy dane wejściowe użytkownika w polu tekstowym zakładają, że jest to formularz logowania, pole tekstowe username podczas wprowadzania użytkownika ", można obsłużyć błąd – NPE

Odpowiedz

2

Tutaj jest bardzo prosty przykład ASP.NET stosując sparametryzowanego zapytanie poprzez OleDb w VB:

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

Notatki:

  • Parametryzowane zapytanie używa "?" zamiast "prawdziwych" nazw parametrów, ponieważ Access OLEDB ignoruje nazwy parametrów. Parametry muszą być zdefiniowane w dokładnej kolejności, w jakiej pojawiają się w.

  • Tabela [Tabela użytkowników] ma klucz podstawowy AutoNumber, a SELECT @@IDENTITY pobiera nową wartość klucza utworzoną przez instrukcję INSERT INTO.

Powiązane problemy