SQL注入原理:
注入攻击的本质:把用户输入的数据当做代码执行。
两个必要的条件:一是用户可以控制输入;二是原本要执行的代码拼接了用户的输入数据。
1、任何可以与数据库交互的编程语言都可能出现SQL注入漏洞。
2、SQL注入能够让攻击者对服务器进行任意的文件读取,危害巨大。
修复建议:
1、普通用户与系统管理员用户的权限要有严格的区分
数据库应该使用最小权限原则,例如普通用户不允许去查询系统表、调用loadlife函数等;即使终端用户使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。
2、加强对用户输入的验证
原则:不相信用户的一切输入。始终通过测试类型、长度、格式和范围来验证用户输入,对数据库的特殊字符(‘“<>&*_等)进行转义处理,或编码转换,过滤用户输入的内容。
3、使用预编译处理
使用预编译的SQL语句,变量用?表示, 使得SQL查询的语义逻辑被预先定义,而实际的查询参数值则等到程序运行时再确定。因此攻击者无法改变SQL的结构。在上面的例子中,如果攻击者插入类似 1’or ‘1’=‘1的字符串,也只能将此字符串当做username来匹配查询。
4、统一编码
网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。