扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
求教【SQL注入】问题
经常看到有大侠为了防止SQL注入,替换敏感关键字符的做法(参数化除外。),我一直不解。 因为我一般都是: xx.replace("'","''"); 即单引号替换为两个单引号,就没事了。但是刚百度了一下,发现很多人都是除了替换单引号之外,还要替换 insert..update..delete 等等各种数据库关键字。我不知道防止这些关键词儿的兄弟们有没有亲自测试过。但我测试的结果,只要不输入奇数倍数的单引号,随你怎么输入,都没问题。insert..update..delete等等,这些词儿,我随意输入,都没事。我在想,是我测试思路不对?? 还是这些词儿压根儿就没事儿? 请高人给指点下,谢谢。
测试代码如下:(无连接数据库的代码,不过发了也没用)
类文件中
C# code
public static void Execute(string sql)
{
SqlConnection conn = Conn.GetConnection();
using (conn)
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
}
public static String getOne(string sql)
{
using (SqlConnection conn = Conn.GetConnection())
{
SqlCommand cmd = new SqlCommand(sql, conn);
if (cmd.ExecuteScalar()!=null)
{
return cmd.ExecuteScalar().ToString();
}
return "xx";
}
}
前台:
HTML code
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
<asp:Label ID="Label1" runat="server"></asp:Label>
后台:
C# code
protected void Button1_Click(object sender, EventArgs e)
{
/*
* 增
* string sql = "insert into test values('"+TextBox1.Text+"')";
* Common.Execute(sql);
*/
/*
* 删
* string sql = "delete test where name='" + TextBox1.Text + "'";
* Common.Execute(sql);
*/
/*
* 改
* string sql = "update test set name='" + TextBox1.Text + "'";
* Common.Execute(sql);
*/
/*
* 查
* string sql = "select top 1 name from test where name='" + TextBox1.Text + "'";
* Label1.Text=Common.getOne(sql);
*/
}
数据库:
SQL code
create table test
(
name varchar(20)
)
针对这个:
/*
* 删
* string sql = "delete test where name='" + TextBox1.Text + "'";
* Common.Execute(sql);
*/在TextBox1中输入 ';delete test;--
那最后SQL拼接的结果是:delete test where name='';delete test;--'
这样楼主的表里的数据就全玩完了
你可以照这个思路再去想象如果你的代码写成
string input = TextBox1.Text.replace("'","''");
string sql = "delete test where name='" + input + "'";
exec(sql);
那最后结果变成:delete test where name=''';delete test;--'
这样就不会出现问题对于替换单引号之后怎么注入,我能力有限,暂时想不出啥办法
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者