首页 新闻 会员 周边 捐助

防sql注入的问题?

0
[已解决问题] 解决于 2012-11-28 12:53

拼接一sql  select * from tb where '条件A'

条件A是根据客户端拼接而成的

从客户端拿到的数据是不是过滤一个 单引号' 就可以了呢??

koi的主页 koi | 初学一级 | 园豆:4
提问于:2012-11-27 11:32
< >
分享
最佳答案
0

要么就过滤全,要么就参数化的方式

还有,如果你的程序运行的是内网的环境,我想这个不是什么问题

奖励园豆:5
chenping2008 | 大侠五级 |园豆:9836 | 2012-11-27 14:28
其他回答(6)
0

你把查询条件参数化就行,光过滤单引号不行。简单的例子是:条件A:  1=1;drop table xxxx

飞来飞去 | 园豆:2057 (老鸟四级) | 2012-11-27 12:42

好像这样会直接报错而不会删表

1  SqlConnection conn = new SqlConnection("data source=192.168.1.101;database=OMSCRM;uid=sa;pwd=sa;");
2             conn.Open();
3             SqlCommand cmd = new SqlCommand("select * FROM tbTest WHERE '1= 1;drop table tbTest'", conn);
4             cmd.ExecuteNonQuery();

在应使用条件的上下文(在 '1= 1;drop table tbTest' 附近)中指定了非布尔类型的表达式。

支持(0) 反对(0) koi | 园豆:4 (初学一级) | 2012-11-27 12:51

@koi: 晕,你的单引号还在,错误提示很明显了啊,where 后面需要跟着一个布尔型的表达式,你跟的是字符串

支持(0) 反对(0) 飞来飞去 | 园豆:2057 (老鸟四级) | 2012-11-27 12:59

@飞来飞去: 对啊  我把客户端输入的单引号都过滤掉  不就不会出现例如删表的情况了吗? sql注入不久是根据单引号来弄的?  比如 

select * FROM tbTest WHERE  User_ID = '条件'
如果上面条件 是 qqq' or 1=1 ;
drop table tbTest
结果sql就变成
select * FROM tbTest WHERE  User_ID = 'qqq' or 1=1 ;drop table tbTest
过滤掉里面的单引号 不就还是
select * FROM tbTest WHERE  User_ID = 'qqq or 1=1 ;drop table tbTest’


支持(0) 反对(0) koi | 园豆:4 (初学一级) | 2012-11-27 13:41
0

参数化和采用存储过程都行

January | 园豆:174 (初学一级) | 2012-11-27 13:17
0

struts2有过滤功能

angelshelter | 园豆:9907 (大侠五级) | 2012-11-27 13:36
0

存储过程!

net小伙 | 园豆:232 (菜鸟二级) | 2012-11-27 15:58
0

过滤 参数化

puhome | 园豆:202 (菜鸟二级) | 2012-11-27 15:59
0

参数化查询

伏草惟存 | 园豆:1420 (小虾三级) | 2012-11-27 23:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册