SQL注入安全防护系统开发与研究

随着互联网和信息技术的迅速发展,计算机和网络的安全问题也越来越受到人们的关注。网络的安全性变得越来越复杂,计算机用户们为加强网络安全防范,也是采用了各种防御方法和措施。但是同时,黑客们也在不停的尝试着各种各样的攻击方式和方法,等待进行非法入侵,利用网络安全缺陷实施犯罪的现象屡见不鲜,其中 SQL注入缺陷是最为普遍的一种。数据库技术和B/S模式应用技术迅速发展,SQL注入攻击也成为黑客进行数据库攻击最常用的手段。在 OWASP的年度十大安全问题中, SQL注入的排名就可以看出SQL注入攻击对网络环境的安全性会造成多大的危害,因此SQL注入防范也就成了网络安全研究的一个重点。SQL注入使攻击者能够获得、修改和删除数据库中的信息,以及对网络服务器进行控制,从而获取用户的隐私信息,从而给个人和社会带来巨大的损失。本文通过对SQL注入攻击常用攻击的分析和研究,提出一些具有针对性的防护方法和有效防御攻击的策略。

关键词:  SQL注入攻击  网络安全  SQL注入防范  黑客入侵

Abstract

With the rapid development of Internet and information technology, the security of computer and network has been paid more and more attention. Network security becomes more and more complex, computer users in order to strengthen the network security, but also adopt a variety of defense methods and measures. But at the same time, hackers are also trying a variety of attack methods and methods, waiting for illegal invasion, the use of network security defects to commit crimes is not uncommon, among which SQL injection defects is the most common one. With the rapid development of database technology and B/S mode application technology, SQL injection attack has become the most common means for hackers to attack database. In the OWASP annual top ten security problems, SQL injection ranking can be seen SQL injection attacks on the security of the network environment will cause much harm, so SQL injection prevention has become a focus of network security research. SQL injection enables attackers to obtain, modify and delete the information in the database, as well as control the network server, so as to obtain the user's private information, which brings huge losses to individuals and society. Based on the analysis and research of SQL injection attacks, this thesis puts forward some targeted protection methods and effective attack defense strategies.

Key words:  SQL injection attack   Network security   SQL injection defense   hacker intrusion  

目录

第1章 绪论

1.1研究背景

1.2研究意义

第2章 SQL注入简介

2.1 什么是SQL注入

2.2 SQL注入攻击原理

2.3 常见的SQL注入类型

2.3.1基于布尔、时间的盲注攻击

2.3.2基于报错的注入攻击

2.3.3 Union联合查询注入攻击

2.3.4字符型注入攻击

第3章 SQL注入攻击实验

3.1 实验目的

3.2 实验设备及环境

3.3 实验步骤

3.3.1环境搭建

3.3.2基于报错的注入

3.3.3基于布尔的注入

3.3.4 UNION注入

3.3.5基于时间的盲注

第4章 SQL注入攻击防范措施

4.1数据库查询改为参数化查询

4.2对用户提交数据进行验证和过滤

4.3合理安全的配置数据库服务器

4.3.1对账户和密码进行配置

4.3.2对数据库的连接方式进行设置

4.3.3对数据库中的重要数据进行加密

第5章 结语

参考文献

致谢

浅析SQL注入攻击

  1. 绪论

1.1研究背景

SQL注入是 Web应用程序的一种漏洞,它最早出现在1998年晚些时候,由黑客RFP发表的名为“NT Web Technology Vulnerabilities”的文章中[1]。SQL注入作为针对Web安全的攻击方式,因为对Web安全造成的极大威胁很快被大众所关注。它对Web应用系统运营的破坏性影响之大,从OWASP发布的十大Web安全漏洞排行榜中就可以看出[2]。Imperva的 WAF已经使网站每天遭受到的 SQL注入攻击减少了几百万次,至少有80%的受保护站点每月遭受黑客袭击,而且每天都有数以百计的站点遭受SQL注入攻击。由于其实施简单,适用范围广,威胁大,而且在许多情况下不易察觉,SQL注入成为了一个不容忽视的漏洞,如何有效地防止 SQL注入攻击,成为当前亟待解决的问题。

1.2研究意义

SQL注入攻击是一种常见的普遍的网络攻击手段,攻击者可以利用 SQL字符串或者更改 URL的参数等手段,将恶意代码注入到数据库中。这种带有恶意的 SQL语句将被解析和执行,使得攻击者可以对机密数据进行存取或控制[4]。对于攻击者来说, SQL注入攻击是一种相对简单的攻击方法,并且如果成功了,还能得到更多的好处[5]。因此,在很多公司和机构中,防止 SQL注入攻击已经成为一项重要的安全措施。为了防范SQL注入攻击,开发人员需要实施一系列安全措施,例如使用预编译语句、验证输入数据、限制数据库用户权限、使用安全的密码等。也可以使用一些安全工具来对 SQL注入攻击进行防御,比如 Web应用程序防火墙(WAF)和代码审查工具。

SQL注入攻击的对象是数据库,这是一种典型的通过伪造字符串代码从数据库中盗取信息的注入式攻击[6],与其他安全措施相比,防止SQL注入攻击具有较高的优势,因为它可以在不破坏应用程序性能的情况下有效地防止攻击。但是,防御SQL注入攻击并不完美,仍然存在一些限制和挑战。例如,一些应用程序可能包含复杂的查询,这使得防止SQL注入变得更加困难。

总之,SQL注入攻击已经成为互联网安全领域中一个重要的问题。只有通过采取有效的措施来保护Web应用程序,才能确保用户数据的安全,并使企业与组织免受损失。所以,对 SQL注入攻击进行检测及防御技术的研究是非常有意义的。

  1. SQL注入简介

2.1 什么是SQL注入

SQL注入也是一种常见的Web安全漏洞,通常,攻击者通过在用户可以输入的地方,比如输入框,来获得或者修改数据库的数据。

如果一个站点被 SQL注入了,那么攻击者就有机会获得敏感数据,如用户名、密码、个人信息等。此外,攻击者还可以对网站进行破坏性操作,如删除或修改数据、插入恶意代码等[7]。

与其他技术相比,SQL注入攻击的威胁程度比较高,因此需要更加重视防范。同时,SQL注入攻击也是一种比较容易实现的攻击方式,攻击者往往会优先考虑这种方式攻击目标网站。为避免 SQL注入攻击,开发者通常采用参数化查询或者预编译的方法来保证用户所输入的数据是正确的。另外,开发者也必须严格筛选并约束输入内容,以确保只有允许的字符被接受。最重要的是,开发人员需要定期更新和测试他们的代码,以便及时发现和修复安全漏洞。

2.2 SQL注入攻击原理

SQL注入指的是 Web应用程序没有对用户输入的数据的安全性进行验证,或者没有对数据进行严格的筛选,这就导致了攻击者能够篡改和伪造正确的 SQL语句,在管理员不知情的情况下,对 SQL语句进行操纵,进而欺骗数据库服务器,在未经授权的情况下,对其进行任意操纵,以获得所需要的数据信息[8]。SQL注入大部分都是通过正常的 www端口来访问的,从外表上来看,它与普通的网页访问并没有什么区别,所以无法发出警报[3]。SQL注入攻击是通过操作输入来修改语句,然后执行代码来攻击服务器,在表单、输入域名和页面请求的查询字符串中插入数据库语句命令,最后通过 Web服务器来执行恶意命令[8]。

SQL注入攻击的实现可以通过登录验证中的模块来进行解释,在登录窗口中,会有用户信息:用户名(用户 name)和密码(password),SQL注入攻击的原理是通过检索用户表(users)中的这两个参数的结果被允许访问,在数据库端的常规查询语句为:

Select*from users where username = 'admin' and password = 'hello'

给username和password赋值“admin'or 1=1--”和“任意输入内容”则代码就变成:

Select*from users where username = 'admin' or 1=1-- and password = '任意输入内容'

这样,密码认证就被注释了,而用户名认证则被“1=1”的恒等式所取代, 用户名和密码的验证就没用了,攻击者能够移除数据库中的表,甚至能够执行查询,插入,更新数据的行为[9]。

上面的例子只是SQL注入攻击中最简单的攻击方式,只要有 SQL注入攻击的弱点,恶意攻击者就能利用各种各样的专门的工具进入到数据库中,甚至进入到管理员的信息中,以此控制、上传病毒、木马或恶意文件,给网站带来巨大危害[10]。

2.3 常见的SQL注入类型

SQL注入攻击有很多种,从不同的视角来看有不同的分类。按照注入点不同,可以将其分为数字型注入、字符型注入;按照提交方式分类,可以分为get注入、post注入、Cookie注入等;以获取信息的途径来看,可以分为布尔盲注、时间盲注、报错注入、联合查询注入等;除此之外,还有其他的分类方法[11]。这篇文章只是列举了一些常用的 SQL注入攻击方法。

2.3.1基于布尔、时间的盲注攻击

布尔盲注是一种系统对SQL语句的响应只返回真或假时,攻击者从Web页面返回值获取数据库信息的注入方式。系统只有真或假这两个状态,数据库信息无法从应答信息中直接得到,但是能够用逻辑判断得到[11]。

当布尔盲注页是正常的时候,攻击者不能确定是否已经执行了注入代码,也就是说,他不知道有没有被注射的点,这个时候,攻击者就必须通过页面响应的时间差异来判断有没有被注射的点,通过数据库的延时函数判断注入点,这就是时间盲注。

这种注入方式属于暴力破解,消耗的时间较长,然而,如果攻击者可以确定目标信息或者弱点的位置,那么他们就可以实现攻击的自动化,从而对网络安全造成巨大的威胁。

2.3.2基于报错的注入攻击

攻击者可以向系统提交错误的SQL语句,虽然错误的语句不会被执行,但是数据库的相关信息会出现在返回的提示信息中,这样就可以获得系统的内部信息。总的来说,基于报错的注入是一种公式化的注入方法,主要是在页面中没有显示位输出了错误信息时使用[8]。

2.3.3 Union联合查询注入攻击

联合查询注入就是攻击者能够在原来的语句后面加上新的目标语句,以此对系统的数据进行非法操作。通过联合查询来进行注入,如果确定要注入的页面有显示位, union将两个或两个以上具有相同列并且各列的数据类型也相同的 select查询语句的结果集放在一起,并利用这一特征来进行拼接,从而得到所需要的信息。

2.3.4字符型注入攻击

字符型注入攻击是系统未能进行转义字符过滤而引发的攻击。用户在没有经过适当筛选的情况下,将会在 SQL语句中加入危险数据的情况下登录,不小心被系统执行就会导致数据库被攻击,数据库的数据信息被操控,引发注入攻击的安全隐患。举例说明,以下为原代码:

String strSql=“SELECT id username password FROM [users] WHERE username = ' '+username+ ' ' ”

此段代码是希望从数据库的用户表中读出用户名为某一特定值的,若“username”变量被恶意写入或被伪造,则执行后会泄漏数据库中的信息。如将username设置为 'a' or '1'= '1'时,原先的代码就变成了:

SELECT*FROM [users] WHERE username = 'a' or '1'= '1'

这个语句被执行后,无论用户名输入什么都能进入系统中,会是应用系统受到危害[12],因为赋值'1'= '1'是永远正确的。

  1. SQL注入攻击实验

3.1 实验目的

通过几种简单的SQL注入实验了解网站的运行机制和SQL注入攻击的基本原理,以及如何有效地防止 SQL注入攻击,从而提高系统的安全性。

3.2 实验设备及环境

设备:Vmware  DVWA  phpStudy

环境:创建VMWARE虚拟机的Windows环境,在虚拟机中安装phpstudy,并搭建DVWA环境。

3.3 实验步骤

3.3.1环境搭建

安装虚拟机软件Vmware,通过镜像在虚拟机中安装Windows操作系统,下载phpstudy,将DVWA-master拷贝到phpstudy pro下的WWW目录下。

在虚拟机的C:\phpstudy_pro\WWW\DVWA-master\config目录下,找到config.inc.php.dist文件将默认密码p@ssw0rd修改为root,保存并将文件后缀名改为.php。

开启PHPstudy,并打开Apache2.4.39和MySQL5.7.26。

使用浏览器访问http://localhost/DVWA-master/login.php登录DVWA。

3.3.2基于报错的注入

错误注入的思想是根据所得到的错误信息,构建一个特定的 SQL语句,来确定 SQL注入点;同时,也可以通过数据库中的错误信息,来检测数据库中的敏感信息。

如果键入一个单引号,则会出现一个页面错误,并引发数据库异常,这表示网站有注入点[13]。

3.3.3基于布尔的注入

布尔逻辑注入的想法,是用 SQL语句来构造一个逻辑语句,并对在其中额外的代码进行注释,这里就要用到or。输入’or 1=1-- ’得到以下结果:

查看代码

第一个单引号用于闭合前面的条件,之面的or 1=1为真的条件,它会对随后的全部声明进行注释,where user_ id= 'or 1=1这个条件语句user_ id=' '这个语句肯定是假的,因为我们的ID是阿拉伯数字,而这里面是空,所以为假,但是1=1这个语句肯定为真,会注释后面的语句,or的存在使语句只要存在有一个真条件这个语句就是真,就是说这个where语句一定为真,整个语句表达的是从DVWA库的users表里面查询first_ name ,last_ name两个字段的所有内容[14]。

3.3.4 UNION注入

UNION被用于与之前的 SELECT查询语句相结合,能够查询到更多的信息,通常情况下,在确定了错误以及布尔注入的位置后,就能够使用 Union语句来获得有效的信息了[4][15]。

输入’union select 1-- ’后,转到报错界面,因为是两个字段,我们输入的语句union后面只有一个字段,所以会报错;

输入’union select 1,2 -- ’就不会报错。

union是我们注入常用的方式,里面的1,2,3代表的是字段名,union语句查询的时候,前后的字段必须相同,所以我们可以用数字代表字段来猜测,这里显然只有两个字段。

3.3.5基于时间的盲注

一些数据库对于错误信息有安全配置,所以要探测注入点需要用到sleep语句[16]。

输入1' and sleep(5) -- '

页面加载了一段时间说明存在注入点。

第4章 SQL注入攻击防范措施

4.1数据库查询改为参数化查询

为了避免 SQL注入攻击,用户输入到页面中的信息不能直接放到 SQL语句中,必须对其进行有效地过滤后才能执行,还可以采用参数化语句,即当连接数据库查询时,不会直接的显示所要填写的数字或资料,而会用参数化语句来赋予这些值[14]。使用参数化查询有一个优点,那就是所填信息不会被直接嵌入到 SQL语句中,由于数据库不会将这些参数当作 SQL查询句中的一部分,所以当数据库完成了 SQL语句之后,它们就会被执行[17]。这样就可以避开 SQL注入攻击,因此,参数化查询被视为抵御 SQL注入攻击的最佳方法。

4.2对用户提交数据进行验证和过滤

用户输入在SQL注入攻击中起着重要作用,为了有效地防止 SQL攻击,用户输入的数据也要经过检查和筛选。当使用者递交资料时,会侦测到使用者所递交的资料,如果里面包含一些敏感的字符串,就会被当作是一个 SQL注入式攻击。此时,数据库能够阻止 SQL语句的执行,对出现的敏感字符或字符串进行转义替换,或者使非法 SQL语句无效,从而达到防范攻击的效果[10]。

在系统安全模块的设计中,可以使用诸如黑色/白色名单之类的机制对用户的输入进行身份验证[5]。使用“黑名单”可以对一些有危险性的字符进行处理,而使用“白名单”可以对一些特殊类型的输入进行处理。该方法通过对使用者输入的正确性的检验,保证使用者所输入的资料都是合法的。但是,既要在客户机,也要在服务端进行数据检查,还得在服务端进行验证[18]。

4.3合理安全的配置数据库服务器

一般在资料库设定时,会考虑为资料库设定安全的项目,对其进行适当的配置,可以有效地提高整个系统的攻击防御能力。因此,对数据库的配置给予足够的重视,能够有效地防止 SQL注入攻击的问题[19]。

4.3.1对账户和密码进行配置

为防止恶意用户进行非法远程登录,要对数据库的登录账号和密码进行设置。规定用户名不能被删除或修改,在实际处理期间重点保护和维护账号,一般用户只有在特定的环境下才能得到许可[5]。通常情况下,使用者仅能使用其自身的权限来处理资料;在特定的情形下,当有必要进行越级处理时,可以建立一个检测器,并给予即时的反馈来发现有没有 SQL注入攻击。为不同用户设置安全性更高的密码并定期进行修改,在一定程度上也可以维护数据库系统安全,防范攻击问题[20]。

4.3.2对数据库的连接方式进行设置

当一个数据库与网络相连时,就很容易被攻击。为了使服务器只能进行本地连接,同时使数据库起到联网的作用,可以在数据库和应用系统间增设一个数据访问层。数据访问层是数据库与应用程序服务器进行数据交换的地方,在数据传输中,网络用户所用的数据首先被传送到数据访问层,之后经过访问层的处理,再被传送到数据库,对数据库进行操作,并将操作结果传递到数据访问层,最后,访问层将数据传递到服务器[18]。通过这种方法,可以有效地保护数据库。

4.3.3对数据库中的重要数据进行加密

恶意用户对数据库的攻击都是为了获取数据库中的重要数据,那么我们可以对这些重要数据加密保存,利用Web防火墙加强安全管理,即使网站被攻破了,泄露的也只是加密后的数据,这样也可以减少损失。

以上这些对于SQL注入攻击的防范措施通常可以应用到那些涉及到用户输入或者需要与数据库进行交互的地方,SQL注入攻击防范措施的应用场景包括但不限于以下几个方面:

  1. Web应用程序:Web应用程序常常需要与数据库进行交互,因此在设计和开发过程中必须采取相应的防范措施来预防SQL注入攻击。例如,通过使用参数化查询、输入验证和过滤等技术,可以有效地防止SOL注入攻击。
  2. 移动应用程序:移动应用程序同样需要与数据库进行交互,通过使用预编译语句、数据绑定和加密、合理安全的配置数据库服务器等方法,可以有效地防止SQL注入攻击。
  3. 商务平台:平台的数据库中通常会有公司或客户的信息,也需要与数据库进行交互,例如记录用户个人信息、统计用户活动等。因此,平台同样可以采取参数化查询、输入验证和过滤、合理安全的配置数据库服务器等相应的防范措施来预防SQL注入攻击。

第5章 结语

本文重点介绍了目前常用的 SQL注入攻击方法和一些基本的防御技术。在进行了研究后,发现 SQL注入攻击对 Web网站的安全构成了严重的威胁,SQL注入操作过程方便,有很多现成的应用工具,又不需要掌握太多专业知识,恶意用户只需要较少的相关知识就能轻易的发起攻击。所以,SQL注入是目前应用系统所面临的首要安全威胁,必须进行有效防御,系统的安全性也必须增强。

要想有效地防范 SQL注入攻击,必须要建立一套完整的技术层次上的防御计划,包括编写程序、配置数据库,并编写一套完整的管理系统,网站设计者也应该对 SQL注入攻击给予足够的关注,深入理解其工作原理,做好网站的安全性保护,把 SQL注入攻击的概率降低到最小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值