SQL 注入漏洞防护看这一篇就够了!,万字长文
● 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露
● 网页篡改:通过操作数据库对特定网页进行篡改
●网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击
●数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改
●服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统
●破坏硬盘数据,瘫痪全系统
一些类型的数据库系统能够让 SQL 指令操作文件系统,这使得 SQL 注入的危害被进一步放大。
3、经典 SQL 注入源码浅析
孙子兵法说“知己知彼,百战不殆”。只有了解了对手才能够更好的击败他!
采用靶场 DVWA 靶场 low 级别的 SQL 注入源码进行分析 DVWA 源码下载地址:http://www.dvwa.co.uk打开:DVWA\vulnerabilities\sqli\source\low。如下面的 php 代码所示。第一个红框使用的是_REQUEST — HTTP Request 变量默认情况下包含了_POST 和 _REQUEST 就可以了。
主要的问题就是出现在第二个红色框,id’;"; 这段代码采用的是name 拼接到了数据库查询语句中了,没有做任何处理。由此根据代码也可以断定,这将可能导致一个字符型的 SQL 注入,也就是 GET 类型的注入。
举两个简单的例子:
1、$id 为用户输入需要查询的条件,而 SQL 语法是引号双双闭合的,如果输入一个单引号,就会出现语法报错
2、如果输入 1 or 1=1,系统判定为或逻辑,只要有一个条件为真就会输出查询结果,显然 1=1 是为真的,系统就会查询出对应信息
4、如何防御
1、PreparedStatement(简单而有效的方法)
采用预编译语句集,它内置了处理 SQL 注入的能力,只要使用它的 setXXX 方法传值即可。
使用好处:
(1).代码的可读性和可维护性.
(2).PreparedStatement 尽最大可能提高性能.
(3).最重要的一点是极大
地提高了安全性.
原理:
SQL 注入只对 SQL 语句的准备(编译)过程有破坏作用
而 PreparedStatement 已经准备好了,执行阶段只是把输入串作为数据处理,
而不再对 SQL 语句进行解析,准备,因此也就避免了 SQL 注入问题.
2、字符串过滤
比较通用的一个办法:
评论