吴涛 张俊
摘要:随着互联网的发展,基于 Web 服务器语言和后台数据库模式的网站存在安全性问题,其中SQL注入数据库是最具威胁B/S系统漏洞的攻击。该文分析了SQL注入原理及特点,研究了预防 SQL注入的攻击方法,针对B/S系统的特点,提出了字段检查、注入测试、服务器加固、绑定变量和禁止字符串拼接等SQL注入的防治手段,对预防SQL注入提供了有效的方法,增加了B/S系统的安全性。
关键词:SQL注入;B/S架构;WEB安全
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2020)02-0007-02
Abstract: with the development of Internet, there are security problems in Web sites Based on Web server language and background database mode, among which SQL injection database is the most dangerous attack to B/S system vulnerability. This paper analyzes the principle and characteristics of SQL injection, studies the methods to prevent SQL injection. According to the characteristics of B/S system, it puts forward the prevention measures of SQL injection, such as field check, injection test, server reinforcement, binding variables and forbidding string splicing. It provides an effective method to prevent SQL injection and increases the security of B/S system.
Key words: SQL injection; B/S architecture; Web Security
由于网络的快速发展,B/S系统的功能越来越强大。B/S系统通过浏览器即可进行访问,十分便捷。同时B/S系统也伴随着各方面的安全性问题,其中SQL注入是一个很敏感的漏洞,其特点是在用户输入或者信息上传时,将恶意数据或者代码上传到 WEB 应用系统中,导致系统崩溃、获取敏感信息等恶劣行为。SQL 注入攻击的技术门槛低、隐蔽性强、危害性大、杀毒软件也无法查杀,一旦若获取网站 Web Shell 权限,便可上传网页木马、控制整站等违法操作。本文针对SQL注入原理及特点,提出了字段检查、注入测试、服务器加固和绑定变量等有效的防治手段,旨在增强B/S系统的安全性。
1 SQL注入的原理和方法
SQL注入就是通过输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令[1],从而获得数据,对数据库进行破坏等操作,最终达到控制整个服务器的目的。典型的SQL注入分为两类,分别是数据库平台注入和应用层注入(WEB应用层)。数据库平台注入往往是存在恶意攻击数据库。数据库平台的注入就需要数据库管理人员(DBA)对数据进行全方位的管理,包括数据库的配置,数据库权限的管理等等,能够在数据库层面有效地杜绝SQL的注入;平台注入就是典型的进行发送请求字符串,构成一些特殊的SQL语句(例如“selecr * from Student where from password = ‘xxx ‘ or 1 = 1”等),从而进行系统的破坏或者获得非法数据。由于SQL注入的信息和普通用户访问的方式一模一样,难以防御,所以SQL注入也成为B/S系统一个很严重的安全问题。典型的输入域和请求查询的時机如表1所示。
2 SQL注入的防治手段
2.1 进行字段检查
SQL注入时使用一些特殊的字符去拼接服务器后台的SQL语句,常见是字符串拼接如表2所示。为了防止这种字符串的拼接,增加信息的安全性,我们可以对异常注入的信息建立一个云计算库,并定期对库中的数据进行管理、升级等等。从而到达数据的及时性。当我们在执行SQL语句的时候。自动在库中进行匹配。若发现相似度高的、可疑的。发现问题及时进行反馈[2]。匹配具体流程如图1所示。
2.2 进行大规模的注入测试
SQL注入典型的攻击有盲目注入,建表操作,跨表操作。对于盲目注入[3],就是攻击对象去恶意猜测服务器端的错误,用一些可能错误的代码进行大量测试,最终达到窃取服务器数据的问题。盲目注入又分为布尔盲注,时间盲注,延时盲注等,我们可以针对不同的盲注方式[4],在程序上线之前,对程序进行严格的测试,以便发现问题并解决问题。
2.3 对数据库服务器进行加固
对数据库服务器端进行加固,增加服务器的防火墙水平,对不同的用户进行不同的权限受理[5],这样,一般的用户就只能看到自己权限范围内的数据,当用户进行越级操作的时候,设置触发机制,及时进行反馈,检查是否出现SQL注入问题。提高数据库的日志记录级别,把日志记录保存到独立的物理磁盘上面,定期进行检查,发现疑似问题及时进行修复。
2.4 绑定变量
当我们大规模使用SQL语句的时候,一条一条的SQL语句这样的执行,显然就不满足效率的要求了,我们可以对一段SQL语句进行“聚集”化的操作,使一段SQL语句编程一个整体,就是绑定变量的方法,执行的时候,就是一次性执行完毕,这种方法虽然在一定程度上防止了SQL注入的风险。但是这种方式也存在一些弊端,额外的编码过程就显得十分的繁重,但是能够避免SQL的安全性问题,应该进行权衡,在进行绑定变量的操作。
2.5 禁止使用字符串的拼接
数据库中有两种传值符号,一种是$(),作用是在进行字符串拼接后,再由数据库进行编译,通常使用JDBC中的Starement对象来进行语句的执行,在数据库平台中,对特殊字符的防范是很弱的,一旦变量进入了数据库系统,很大程度上增加了SQL注入的风险;一种是#(),这种被称为占位符,在进行数据库访问的时候,先把SQL语句中需要拼接的字段通过特殊符号进行占位,然后进行数据库的预编译,预编译完成之后,在对相应字段进行字符串的拼接,注入参数后,就不会在对SQL进行编译。通常配合JDBC中的prepareStatement来进行预编译;在数据库的操作中,应该禁止$()的使用,能够有效地预防SQL的注入;#()和$()的区别如表3所示;
3 结束语
随着B/S架构的快速发展,服务器的安全性也显得越来越重要,SQL注入可以绕过杀毒软件的查杀,如果不增加特别的防护,SQL注入将会窃取我们的数据。安全性不容忽视。本文介绍的字段检查、注入测试、数据库加固、绑定变量和禁止字符串拼接等,从各个方面阐述了预防SQL注入的方法,能够有效地预防SQL的注入,保证用户和公司的安全。
参考文献:
[1] 叶良艳. SQL注入漏洞检测防御关键技术综述[J]. 安徽电子信息职业技术学院学报, 2018, 17(3):19-22.
[2] 叶梦雄. 基于Web的SQL注入漏洞扫描系统的设计研究[J]. 电子设计工程, 2019, 27(16):20-23, 28.
[3] 王苗苗, 钱步仁, 许莹莹, 等. 基于通用规则的SQL注入攻击检测与防御系统的研究[J]. 电子设计工程, 2017, 25(5):24-28, 32.
[4] 高洪涛. SQL注入攻击途径及策略分析[J]. 网络安全技术与应用, 2011(3):14-16.
[5] 刘雪梅. 基于SQL Server数据库的安全性对策探究[J]. 电脑编程技巧与维护, 2019(9):96-98.
【通联编辑:谢媛媛】