2015-10-16 39 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