防止SQL注入的方法和最优解

学习慕课网的WEB安全之SQL注入课程后和百度相关文章后的总结,主要为解决思路,相关操作自行到慕课网观看。

一、存在问题

“SQL注入”是一种利用未过滤/未审核用户输入的攻击方法(“缓存溢出”和这个不同),意思就是让应用运行本不应该运行的SQL代码。通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,就会造成一些出人意料的结果,最 终达到欺骗服务器执行恶意的SQL命令。

我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们 都需要对用户输入的数据进行过滤处理。

二、解决方法

1)检查变量数据类型和格式

1、使用正则表达式过滤传入的参数

2、PHP函数检查变量

3、前端js检查是否包函非法字符

不灵活,要写死多个检测方法

2)过滤特殊符号

对于无法确定固定格式的变量,一定要进行特殊符号过滤或转义处理。以PHP为例,通常是采用addslashes函数,它会在指定的预定义字符前添加反斜杠转义,这些预定义的字符是:单引号(') 双 引号 (") 反斜杠 () NULL。

相对安全,只是增加黑客的难度,还是能破解

3、绑定变量,使用预编译语句

 MySQL的mysqli驱动提供了预编译语句的支持,不同的程序语言,都分别有使用预编译语句的方法。实际上,绑定变量使用预编译语句是预防SQL注入的最佳方式,使用预编译的SQL语句语义不会发生改变,在SQL语句中,变量用问号?表示,黑客即使本事再大,也无法改变SQL语句的结构,像上面例子中,username变量传递的plhwin' AND 1=1-- hack参数,也只会当作username字符串来解释查询,从根本上杜绝了SQL注入攻击的发生。

最优解

最后修改:2018 年 11 月 04 日
如果觉得我的文章对你有用,请随意赞赏