6

के साथ एसक्यूएल इंजेक्शन रोकथाम मैं एएसपी.नेट में एक नौसिखिया हूं इसलिए मुझे एएसपी.नेट में एसक्यूएल इंजेक्शन को रोकने के बारे में कुछ सवाल हैं। मेरी प्रोग्रामिंग भाषा VB.NET है, सी # नहीं, और मैं अपने डेटाबेस के रूप में माइक्रोसॉफ्ट एक्सेस का उपयोग कर रहा हूं।माइक्रोसॉफ्ट एक्सेस और वीबीएनईटी

मेरे प्रश्न हैं:

  1. कैसे एसक्यूएल इंजेक्शन से मेरी डेटाबेस की रक्षा के लिए?
  2. मैं अन्य मंचों से पोस्टिंग पढ़ रहा हूं और उन्होंने कहा कि पैरामीटर प्रक्रियाओं के साथ पैरामीटर, गतिशील एसक्यूएल के साथ पैरामीटर। क्या उन्हें माइक्रोसॉफ्ट एक्सेस डेटाबेस में कार्यान्वित किया जा सकता है?
+0

इस मदद करता है? ... एमएस एक्सेस डेटाबेस में एसक्यूएल इंजेक्शन [डुप्लिकेट] http://stackoverflow.com/questions/9392330/sql-injection-in-ms-access-database ... – Chris

+0

मेरा मानना ​​है कि आपको उस विषय से पढ़ने और पास करने की आवश्यकता है http://msdn.microsoft.com/en-us/library/aa139977(office.10).aspx – Aristos

+0

@ क्रिस मैं सिर्फ एसक्यूएल इंजेक्शन से अपने डेटाबेस की रक्षा करना चाहता हूं, इसलिए जब टेक्स्ट बॉक्स में उपयोगकर्ता प्रविष्टि डेटा, मान लें कि यह लॉग इन फॉर्म है, उपयोगकर्ता प्रविष्टि टेक्स्ट के दौरान उपयोगकर्ता नाम टेक्स्टबॉक्स ', एक त्रुटि को संभाला जा सकता है – NPE

उत्तर

2

यहाँ एक बहुत ही सरल ASP.NET VB.NET में एक पैरामिट्रीकृत क्वेरी का उपयोग कर OleDb के माध्यम से उदाहरण है:

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 

नोट्स:

  • पैरामीटरयुक्त क्वेरी "?" का उपयोग करती है पैरामीटर के लिए "असली" नामों के बजाय, एक्सेस OLEDB पैरामीटर नामों को अनदेखा करता है। पैरामीटर को OleDbCommand.CommandText में दिखाई देने वाले सटीक क्रम में परिभाषित किया जाना चाहिए।

  • [उपयोगकर्ताटेबल] तालिका में AutoNumber प्राथमिक कुंजी है, और SELECT @@IDENTITYINSERT INTO कथन द्वारा बनाए गए नए कुंजी मान को पुनर्प्राप्त करता है।