mysql 绑定参数_mysql绑定参数bind

下面我们来模拟一个用户登录的过程.. ?php $username = aaa; $pwd = pwd; $sql = SELECT * FROM table WHERE username = '{$username}' AND pwd = '{$pwd}'; echo $sql; //输出 SELECT * FROM table WHERE username = 'aaa' AND pwd = 'pwd' ? 这样去执行这

下面我们来模拟一个用户登录的过程..

输出 SELECT * FROM table WHERE username = 'aaa' AND pwd = 'pwd'

?>

这样去执行这个sql语句.显然是可以查询出来东西的.返回用户的这一列.登录成功!!

然后我改一下..把密码改一下.随便一个值.如下.我改成了ppp.

输出 SELECT * FROM table WHERE username = 'aaa' AND pwd = 'ppp'

?>

这样很显然.如果去执行这个SQL语句..是查询不到东西的.也就是密码错误.登录失败!!

但是有的人总是不老实的.他们会想尽一切办法来进行非法的登录.所谓非法就是在他不知道用户名密码的时候进行登录.并且登录成功..

那么他们所做的原理是什么呢??其实原理都是利用SQL语句..SQL语句强大的同时也给我们带来了不少麻烦..

我来举个最简单的例子.我们要运用到的SQL关键字是or

还是上面的代码.我们只要修改一下密码即可

输出 SELECT * FROM table WHERE username = 'aaa' AND pwd = 'fdsafda' or '1'='1'

?>

执行一下这个SQL语句..可怕的事情发生了..竟然可以查询到这一行数据..也就是登录成功了..

这是多么可怕的事情..

SQL注入演示教程,见博文:http://blog.csdn.net/wusuopubupt/article/details/8818996

PHP为了解决这个问题.magic_quotes state..就是PHP会自动过滤传过来的GET.POST等等.

题外话.实践证明这个东西是畸形的..大部分程序不得不为判断此功能而耗费了很多代码..

在Java中可没有这个东西..那么Java中如何防止这种SQL注入呢??

Java的sql包中提供了一个名字叫PreparedStatement的类.

这个类就是我要说的绑定参数!

什么叫绑定参数??我继续给大家举例..(我用PHP举例)

当然.到此.你肯定不知道会输出什么..更无法知道绑定参数有什么好处!这样做的优势是什么.更不知道bindParam这个函数到底做了什么.

下面我简单的写一下这个函数:

注:由于得知道去除问号的次数..所以我用了一个global来解决.如果放到类中就非常容易了.弄个私有属性既可

通过上面的这个函数.我们知道了..绑定参数的防注入方式其实也是通过转义进行的..只不过是对于变量而言的..

我们来做一个实验:

输出 SELECT * FROM table WHERE username = 'aaaa' AND pwd = 123

?>

可以看到.生成了非常正规的SQL语句.那么好.我们现在来试下刚才被注入的那种情况

输出 SELECT * FROM table WHERE username = 'aaa' AND pwd = 'fdsafda\' or \'1\'=\'1'

?>

可以看到.pwd内部的注入已经被转义.当成一个完整的字符串了..这样的话.就不可能被注入了.

http://hi.baidu.com/woyigui/item/afc6ec2efaa49f0f73863e2e

参考:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值