赞
踩
环境:
sql注入本质:
接收用户输入的字符串并且将字符串拼接成sql语句执行。由于用户的故意输入,打断了原来的sql结构。
--正常语句
select * from sysuser where username='admin' and pwd='123456'
--被注入的语句(用户输入的用户名是【admin' --】,密码还是123456)
select * from syssuer where username='admin' --' and pwd='123456'
如何防范sql注入?
最简单的方法:
将用户输入的字符串中的‘替换为’'。
就是这么简单。还有,如果sql语法中存在\转义符,还需要替换\\。
开源orm工具FreeSql是这么处理的。
使用参数化语句
这种方法是常规的,也是理想的解决办法,但是在in子句中不好实现(因为一个参数无法表达数组)。
下面是常见的参数化sql拼接:
var sql="select * from test where name like @name"
var para=new SqlParameter("name", "%花%");
var sql="select * from test where birth between @start and @end"
var para1=new SqlParameter("start", DateTime.Now);
var para2=new SqlParameter("end", DateTime.Now);
var sql="select * from test where id in (@id1,@id2)";
var para1=new SqlParameter("id1", 1);
var para2=new SqlParameter("id2", 2);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。