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
控件中?
ID参数必须是字符串 –
如果是,则创建一个存储过程并传递@ID作为参数。 – qxg