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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

防止SQL注入时为什么要用"?"或者":列名(:name)"表示?

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

1 个回复

正序浏览
我说一个例子你就很明白了,
给你一张数据库表,你看下图

有一张表forum_user,里面有username,password这两个字段
表里有两条记录,我现在进行如下查询:
SELECT * FROM `forum_user` where username='asd' and password=' 'or 1 or' '
查询结果是:两条全出来了,是不是感觉很惊奇啊,username和password都没有符合的怎么还可以全都查询出来
这就是成为网站后台“万能钥匙”,接下来就谈谈SQL注入
如果你页面有两个表单一个是用户名一个是密码,你在后台获取这两个参数时进行如下字符串拼接
select * from table where username=' "+username+" '  and password='  "+password+"  '
进行查询时,当别人输入的密码为 'or 1 or'时,就可以吧所有结果都查询出来了,那别人就可以顺利的进入
你的网站后台了。
当你采用防止注入的方式时,如:使用Preparedstatement时,setString方法就会进行字符串的判别,阻止SQL的注入
其他方式的防止SQL注入道理是一样的。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马