A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蔡军 中级黑马   /  2012-3-24 00:10  /  2065 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

上次看了杨老师的视屏上那个防止SQL注入,自己还不太清楚,谁能再跟我解释一下什么是SQL注入,应该如何防止啊?能举例说明更好,谢谢啦!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

倒序浏览
sql注入是由于拼接sql语句引起的。如你的sql语句的条件是不确定的(where部分),需要用户输入来确定的。你可以通过字符串拼接的方式实现。但是,这拼接的方式涉及到条件部分时,就不安全了。如select * from where user=@user;别人就可以给user赋上“xxx or 1=1”使语句永远为真。所以,涉及到条件部分不要拼接。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 孙树迁 于 2012-3-24 01:03 编辑

今天晚上,刚学了,很好理解,重点是,那个SQL语句,
select count(*) from where username='"+ name +"' and password='"+ pass +"'
正常情况是:
用户输入:admin 8888
select count(*) from where username='admin' and password='888888'

如果用户输入:admin 1' or  '1'='1 SQL 语句就变成,(888888 换成1' or  '1'='1)
select count(*) from where username='admin' and password='1' or  '1'='1' 这个SQL语句,
你运行这个,就读出二个记录。
  1.               

  2.                 //第三种,最佳方式。
  3.                 using(SqlCommand cmd = conn.CreateCommand())
  4.                 {
  5.                     cmd.CommandText = "select count(*) from T_Users where username=@uname and password=@pwd";
  6.                     cmd.Parameters.Add(new SqlParameter("uname",name));
  7.                     cmd.Parameters.Add(new SqlParameter("pwd", pass));
  8.                     int i = Convert.ToInt32(cmd.ExecuteScalar());
  9.                     if (i > 0)
  10.                     {
  11.                         Console.WriteLine("登陆成功!");
  12.                     }
  13.                     else
  14.                     {
  15.                         Console.WriteLine("登陆失败,用户名或密码错误。");
  16.                     }
  17.                 }
  18.             
  19.             
  20.          
复制代码
这样写,就可以防止SQL注入了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
Parameters这个属性可以把你传入的值直接和数据库里的值进行比较。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
其实,就是防止别人把他输入的东西当成了SQL语句。。。
回复 使用道具 举报
我的具体看法请参见我的博客:http://www.cnblogs.com/xu-qian-gang/archive/2011/11/24/2262250.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马