写点什么

SQL 注入漏洞防护看这一篇就够了!,万字长文

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:970 字

    阅读完需:约 3 分钟

● 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露


● 网页篡改:通过操作数据库对特定网页进行篡改


●网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击


●数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改


●服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统


●破坏硬盘数据,瘫痪全系统


一些类型的数据库系统能够让 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).最重要的一点是极大


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


地提高了安全性.


原理:


SQL 注入只对 SQL 语句的准备(编译)过程有破坏作用


而 PreparedStatement 已经准备好了,执行阶段只是把输入串作为数据处理,


而不再对 SQL 语句进行解析,准备,因此也就避免了 SQL 注入问题.

2、字符串过滤

比较通用的一个办法:



用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
SQL注入漏洞防护看这一篇就够了!,万字长文