如何进行SQL注入漏洞浅析及防御

介绍

本篇文章为大家展示了如何进行SQL注入漏洞浅析及防御,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一、什么是SQL注入漏洞

将用于输入的查询参数,直接拼接SQL语在句中,导致了SQL注入漏洞. SQL注入攻击指的是通过构建特殊的输入作为参数传入网络应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:

①不当的类型处理;

②不安全的数据库配置;

③不合理的查询集处理;

④不当的错误处理;

⑤转义字符处理不合适的;

⑥多个提交处理不当。

二、SQL注入漏洞的危害

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

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

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

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

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

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

一些类型的数据库系统能够让SQL指令操作文件系统,这使得SQL注入的危害被进一步放大。

3,经典SQL注入源码浅析

孙子兵法说“知己知彼,百战不殆”。只有了解了对手才能够更好的击败他!

采用靶场DVWA靶场低级别的SQL注入源码进行分析DVWA源码下载地址:http://www.dvwa.co.uk打开:DVWA \漏洞\ sqli \ \低来源。如下面的php代码所示。第一个红框使用的是$ _REQUEST的传输参数。$ _REQUEST - HTTP请求变量默认情况下包含了$ _GET, $ _POST和_COOKIE美元的数组。也就是说,再不关心是得到过来的还是文章,总之要取得某一个键的值,就用$ _REQUEST就可以了。如何进行SQL注入漏洞浅析及防御”>主要的问题就是出现在第二个红色框,查询美元=把≡駀irst_name、last_name从用户那里user_id=$ id”;“;这段代码采用的是$ _GET传输的方式,直接将参数美元的名字拼接到了数据库查询语句中了,没有做任何处理,由此根据代码也可以断定,这将可能导致一个字符型的SQL注入,也就是得到类型的注入。</p> <p>举两个简单的例子:</p> <p> 1, $ id为用户输入需要查询的条件,而SQL语法是引号双双闭合的,如果输入一个单引号,就会出现语法报错</p> <p> <img src=

2,如果输入1或1=1,系统判定为或逻辑,只要有一个条件为真就会输出查询结果,显然1=1是为真的,系统就会查询出对应信息

如何进行SQL注入漏洞浅析及防御

4,如何防御

1, PreparedStatement(简单而有效的方法)

采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。

使用好处:

(1)。代码的可读性和可维护性。

(2) .PreparedStatement尽最大可能提高性能。

(3)。最重要的一点是极大地提高了安全性。

原理:

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

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

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

2,字符串过滤

比较通用的一个办法:

如何进行SQL注入漏洞浅析及防御

(| |之间的参数可以根据自己程序的需要添加)

上述内容就是如何进行SQL注入漏洞浅析及防御,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

如何进行SQL注入漏洞浅析及防御