ADO.NET 占位符(防SQL 注入攻击)

当在添加程序中注入攻击时在控制台应用程序中可以这样写:

请输入编号:U006

请输入用户名:无敌

请输入密码:1234

请输入昵称:呵呵

请输入性别:True

请输入生日:2000-1-1

请输入民族:N004');update Users set PassWord='0000';--

添加成功!

这样,不仅添加成功一条数据,而且数据库中Users表里的所有数据的密码都被修改成了0000。数据被篡改了,数据库被成功注入攻击。

那么我们怎么来防御这种注入攻击呢?

其实很简单,只需要修改下程序,在添加数据的C#语句中使用占位符,把位置占住就可以了。

C#语句:

string nation = Console.ReadLine();
conn.Open();
cmd.CommandText = "insert into Users values(@a,@b,@c,@d,@e,@f,@g)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@a", ucode);
cmd.Parameters.AddWithValue("@b", username);
cmd.Parameters.AddWithValue("@c", password);
cmd.Parameters.AddWithValue("@d", nickname);
cmd.Parameters.AddWithValue("@e",sex);
cmd.Parameters.AddWithValue("@f", birthday);
cmd.Parameters.AddWithValue("@g", nation);
int count = cmd.ExecuteNonQuery();
conn.Close();

使用@XXX 占位符提前占好位置。

这样这条“N004');update Users set PassWord='0000';--”语句执行时,会被当成一个整体一块被存入列名为Nation(民族)中。

同时程序维护人员也可以在后台清楚的看到这条数据出现的异常~~~

原文地址:https://www.cnblogs.com/wcl2017/p/7136374.html