首页 新闻 会员 周边

安全隐患代码

0
悬赏园豆:10 [已解决问题] 解决于 2013-08-30 14:06

(1)String product_id = Request["product_id"];
(2)string sql = "SELECT * FROM products WHERE id = '"+product_id +"'";
(3)SqlCommand command = new SqlCommand(sql, connection);

这三句代码分别存在什么安全隐患?多谢大师们指导!

Token007的主页 Token007 | 初学一级 | 园豆:173
提问于:2013-08-30 09:46
< >
分享
最佳答案
0

(2),如果变量 product_id 的值是:"1' or '1' = '1",这个 SQL 语句就是:

SELECT * FROM products WHERE id = '1' or '1' = '1'

你放在数据库里测试看看,无论 id 等于多少,这个语句都能查到结果(只要表 products 里有值)。

收获园豆:10
guwoow | 小虾三级 |园豆:611 | 2013-08-30 09:59

我的这段代码怎么改正呢?多谢!新手不太懂!

Token007 | 园豆:173 (初学一级) | 2013-08-30 10:14

@王金光: 用 SqlParameter。

string sql = "SELECT * FROM products WHERE id = @id";
SqlParameter parameter = new SqlParameter("@id", product_id);
command.Parameters = parameter;
guwoow | 园豆:611 (小虾三级) | 2013-08-30 10:40
其他回答(2)
0

在录入或者读取关键字去查询数据库之前都要先查看一下那些是不是很敏感的字词

 string word = "and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join|'";

防止sql注入

W宁宁 | 园豆:522 (小虾三级) | 2013-08-30 10:28
0
(1)String product_id = Request["product_id"];//如果为null,不过本句话不会抛异常;String最好统一为string
(2)string sql = "SELECT * FROM products WHERE id = '"+product_id +"'";//字符串拼接,SQL注入漏洞,然后*号可以修改为具体字段(我一般不在乎这个)
(3)SqlCommand command = new SqlCommand(sql, connection);//最好使用using(),自动释放资源
幻天芒 | 园豆:37175 (高人七级) | 2013-08-30 11:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册