博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql绑定参数bind_param原理以及防SQL注入
阅读量:5142 次
发布时间:2019-06-13

本文共 1114 字,大约阅读时间需要 3 分钟。

假设我们的用户表中存在一行.用户名字段为username.值为aaa.密码字段为pwd.值为pwd..

 

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

 

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

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

  

 

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

但是有的人总是不老实的.他们会想尽一切办法来进行非法的登录.所谓非法就是在他不知道用户名密码的时候进行登录.并且登录成功..
那么他们所做的原理是什么呢??其实原理都是利用SQL语句..SQL语句强大的同时也给我们带来了不少麻烦..
我来举个最简单的例子.我们要运用到的SQL关键字是or
还是上面的代码.我们只要修改一下密码即可

  

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

这是多么可怕的事情..

 

SQL注入演示教程,见博文:

为了解决这个问题.magic_quotes state..就是PHP会自动过滤传过来的GET.POST等等.
题外话.实践证明这个东西是畸形的..大部分程序不得不为判断此功能而耗费了很多代码..
在中可没有这个东西..那么Java中如何防止这种SQL注入呢??

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

这个类就是我要说的绑定参数!
什么叫绑定参数??我继续给大家举例..(我用PHP举例)

  

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

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

 

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

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

我们来做一个实验:

  

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

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

 

转于http://blog.csdn.net/wusuopubupt/article/details/9668501

 

转载于:https://www.cnblogs.com/christychang/p/6072020.html

你可能感兴趣的文章
JIRA
查看>>
小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
查看>>
深浅拷贝(十四)
查看>>
由级别和性格特征将程序员分类 ---看看你属于哪一种
查看>>
HDU 6370(并查集)
查看>>
BZOJ 1207(dp)
查看>>
PE知识复习之PE的导入表
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
洛谷 P3237 [HNOI2014]米特运输
查看>>
Attributes.Add用途与用法
查看>>
JavaScript面向对象初探——封装和继承
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
kubernetes_book
查看>>
OpenFire 的安装和配置
查看>>