日期:2014-05-19  浏览次数:20522 次

sql注入问题
大家都说用参数的方法可以防sql注入,但是不知原理,请大家指教。
还有asp.net里添加参数的方法有几个重载。我用最简单的一种(就是不指定类型和长度)可以防注入么?如下:
...
com=new   SqlCommand();
...
com.Parameters.Add(参数名,参数值);

------解决方案--------------------
一般用参数查询就可以防止注入攻击了
------解决方案--------------------
比如你判断用户是否可以登陆的存储过程
select count(*) from User where Name = @name and pwd = @pwd
如果返回1就可以登陆 0就不能对登陆

如果这个时候的@name的值是 '用户名-- '或者 ' or 1=1-- ' 那样只要知道用户名 不用密码也可以登陆
所以尽量把存储过趁感谢复杂点
------解决方案--------------------
http://hi.baidu.com/simliving/blog/item/df62172441eade32c995597b.html

http://hi.baidu.com/simliving/blog/item/27d2898feaa10ffb503d9244.html

http://hi.baidu.com/simliving/blog/item/d3ea43b5bba712cf37d3ca44.html

这三篇文章写的不错,建议楼主看一下
------解决方案--------------------
将 '替换为 "
再将- 替换为 -

就能防止sql注入了


------解决方案--------------------
比如你判断用户是否可以登陆的存储过程
select count(*) from User where Name = @name and pwd = @pwd
如果返回1就可以登陆 0就不能对登陆

如果这个时候的@name的值是 '用户名-- '或者 ' or 1=1-- ' 那样只要知道用户名 不用密码也可以登陆
所以尽量把存储过趁感谢复杂点
----------------------
注入攻击不只是 '用户名-- '或者 ' or 1=1-- ' 这样
------解决方案--------------------
学习!
------解决方案--------------------
还是用参数好
------解决方案--------------------
建议把所有对数据库的增删改操作都用存储过程做 这样最安全也最省心 赫赫
------解决方案--------------------
也不知道参数的原理
------解决方案--------------------
学习
------解决方案--------------------
还是用参数好
------解决方案--------------------
重的地方用参数就好,还管他是怎样实现的呢?

如果我自己做的话,那就是把所有存在危险的字符替换掉.也是可行了
------解决方案--------------------
用参数一般就不会被注入了吧!
存储过程难得找存储过程名!
------解决方案--------------------
存储过程是预编译的,所以是可以防治SQL注入攻击的
------解决方案--------------------
http://blog.csdn.net/bakers/archive/2007/02/01/1500399.aspx
http://blog.csdn.net/bakers/archive/2007/02/01/1500029.aspx