SQL Injection是多年来常常遇到的问题,
很多骇客入门都是从这边入手的.
可从前端使用者传入的字符串或者参数传入, 导致程序执行跳脱符导致坏掉.
甚至可以测试出程序中的其他table资讯.
甚至shutdown 数据库主机就不妙了.
以这个例子为例,
数据库会把执行的动作拆成两句
[SELECT * FROM actors WHERE last_name = 'O']
[Reilly']
后面 [Reilly'] 这句就会造成异常.
若骇客把 [O'Really] 字符串改成 [O' SELECT * FROM actors WHERE ''=']
执行完就会变成
[SELECT * FROM actors WHERE last_name = 'O']
[SELECT * FROM actors WHERE ''='']
就可以把 table action 里面的数据全部套出来.
作法其实相当简单.
这边附上官网的解法.
http://php.net/manual/en/function.mysql-real-escape-string.php
满简单的, 就是一个function mysql_real_escape_string()
PHP版本大于4.3即可使用.
更新:
bind_param()
addslashes()
mysql_escape_string()
这个些方法也可以啰,
有兴趣的朋友可以自行参考下.
有时间我再发文补充.