我们在变成的过程中往往都是要对数据库进行大量的增删改查的,但是在我们在编写程序的过程中往往会出现着各种的BUG,如我们在查询数据库的时候就会很容易的出现着程语言上的漏洞
示例:
http://localhost/xiangmu1/web/detail.php?id=19
上面的这个环境是在我本地搭建的个小商城;
这里我们往往是通过一条SQL语句来进行查询语句的
如:
select * from goods where id='{$_POST[‘id’]}';
这样的语句很容易让传说中的黑阔们得逞,SQL漏洞不可不防嘛,嘻嘻
由于有问题,那么我们就要解决问题嘛..
决解问题可以通过PDO里面预处理语句来解决问题从而防止注入.
原理:
我们要先把语句放给服务器端,再给他绑定参数,然后再执行,这里理论是就一步,但我们处理需要四五步才可以,虽然麻烦点,但效率高,而且安全,自动防止SQL注入
select * from goods where id='{$_POST[‘id’]}';
这条语句是在客户端组合的,那么发给服务器是需要经过将组合好的编译,再发送,如用预处理的就是先把
select * from goods where id=’?’
先把这条语句发送给服务器端,我们传什么ip我们不知道,那么我们通过用用?号来对她进行占位,编译完成准备好再穿ID即可执行 如 1,
就算传 1 or 1=1 之类的过来我也是经过处理的不管你再想怎么注入也是经过问号的数据都是在单引号里面,不会被当成值,不会再把SQL语句再编译一下,
说白了就是语句编译好了,就差里面的值了,不管你想怎么注入你写的这个字符串都被当成一个字符串的值了,都相当在单引号里面了.
而原来是在客户端组合完一个完美的语句了,服务器从新把你攻击的那段组合好的语句变异成的进行执行了.
PDO优势
效率高,安全好,建议使用这种方式执行SQL语句