2015-10-16 36 views
0

我測試一個網頁,以防止SQL Injection.Here是我的ASPX頁面源:SqlDataSource控件和SQL注入

<asp:SqlDataSource ID="SqlDataSource_Test" runat="server" 
    ConnectionString="<%$ ConnectionStrings:Default %>" >  
</asp:SqlDataSource> 
<asp:GridView ID="GV" runat="server" Visible="False" 
    DataSourceID="SqlDataSource_Test" ></asp:GridView> 

在後面的代碼:

string ID = Request["id"]; 

SqlDataSource_Test.SelectCommand = "SELECT * FROM TABLE WHERE id = @ID"; 
SqlDataSource_Test.SelectParameters.Add(new Parameter("ID", System.Data.DbType.String, ID)); 

GV.DataBind(); 

,但是當我請求帶網址的頁面:

http://localhost:5284/details.aspx?id=731974'; update table set name='SQL INJECTION' where ID=1--&p=2 

字段「name」更新爲「SQL INJECTION」。

如何防止SQL注入在SqlDataSource控件中?

回答

0

更改new Parameter("ID", System.Data.DbType.String, ...)new Parameter("ID", System.Data.DbType.Int32, ...)

+0

ID參數必須是字符串 –

+0

如果是,則創建一個存儲過程並傳遞@ID作爲參數。 – qxg