sql参数绑定防止注入
来源:互联网 发布:天刀捏脸数据库男性 编辑:程序博客网 时间:2024/05/23 20:22
假设我们的用户表中存在一行.用户名字段为username.值为aaa.密码字段为pwd.值为pwd..
下面我们来模拟一个用户登录的过程..
这样去执行这个sql语句.显然是可以查询出来东西的.返回用户的这一列.登录成功!!
然后我改一下..把密码改一下.随便一个值.如下.我改成了ppp.
这样很显然.如果去执行这个SQL语句..是查询不到东西的.也就是密码错误.登录失败!!
但是有的人总是不老实的.他们会想尽一切办法来进行非法的登录.所谓非法就是在他不知道用户名密码的时候进行登录.并且登录成功..
那么他们所做的原理是什么呢??其实原理都是利用SQL语句..SQL语句强大的同时也给我们带来了不少麻烦..
我来举个最简单的例子.我们要运用到的SQL关键字是or
还是上面的代码.我们只要修改一下密码即可
执行一下这个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来解决.如果放到类中就非常容易了.弄个私有属性既可
通过上面的这个函数.我们知道了..绑定参数的防注入方式其实也是通过转义进行的..只不过是对于变量而言的..
我们来做一个实验:
可以看到.生成了非常正规的SQL语句.那么好.我们现在来试下刚才被注入的那种情况
可以看到.pwd内部的注入已经被转义.当成一个完整的字符串了..这样的话.就不可能被注入了.
- sql参数绑定防止注入
- sql参数绑定防止注入
- 【PHP】使用参数绑定防止SQL注入
- mysql使用bind_param()参数绑定来防止SQL注入攻击
- 防止SQL注入的参数接收
- 防止SQL注入的参数化方法
- 参数化查询----防止SQL注入
- 防止sql注入的参数化查询
- [牛腩]参数化查询防止SQL注入
- 防止SQL注入的参数传值
- 参数化登陆防止SQL注入攻击
- 参数化命令(防止SQL注入)
- hibernate防止sql注入对参数赋值传参数实例
- C#的SQL参数化查询 防止SQL注入
- 参数化SQL语句,防止SQL注入漏洞攻击
- 防止SQL注入-参数化SQL例代码asp.net
- 为什么参数化SQL查询可以防止SQL注入?
- 参数化防止注入
- 浅谈 Linux 内核开发之网络设备驱动
- ERROR 'duplicate declaration of type/attribute' at token ';' on line 14430
- ubuntu14.04 vmware下网络ip配置
- Android软键盘在AndroidManifest中的设置对页面的影响
- 虚拟机三种网络模式&桥接模式设置步骤
- sql参数绑定防止注入
- UVa 1631 Locker (密码锁)
- Shell if else语句
- JAVA 枚举类 Enum
- iOS 10诸如相机、相册、通讯录、麦克风、定位权限设置,防止奔溃或上架被拒
- 【笔记】sass
- xUtils 中的BitmapUtils 全面注释
- ListView 详解
- c++到com组件过度(一个实例)