SQL注入攻击防御策略的研究
2022-11-22刘瑞宁
刘瑞宁
(贵州警察学院 贵州 贵阳 550005)
0 引言
SQL注入攻击属于黑客进行数据库攻击的常见手段,主要是黑客通过网站程序漏洞提交已经设计的SQL语句,对数据库进行攻击之后,盗取其中的数据信息,或者是对数据信息进行修改破坏。而SQL注入攻击具有隐蔽性特点,很难进行发掘和分析,一旦攻击成功将会引发严重后果,难以保证网络环境的安全性。因此,在网络系统实际运行的过程中,应重视SQL注入攻击的防御,按照具体的攻击特点和流程等,科学合理选择防御的措施,有效维护网络安全。
1 SQL注入攻击分析
1.1 常见SQL注入攻击场景
从SQL注入攻击场景层面而言,通常情况下是对数据库与带有数据参数的动态网页进行访问,整体的攻击形式非常隐秘,表面而言和普通的web访问不存在区别,也不容易被发现,但是潜在的风险较高,危害的范围很广。目前最为常见的SQL注入攻击场景,主要就是对WEB应用进行攻击,具体的攻击场景为:脚本类型的攻击场景、恶意用户输入对SQL脚本进行影响的攻击场景等。
1.2 SQL注入攻击策略及流程
1.2.1 攻击策略
SQL注入主要就是将恶意代码插入或是添加到web应用的输入参数,实现攻击的目的,攻击者在实际攻击的过程中,会探测软件编程期间的漏洞隐患,通过此类漏洞问题构造SQL语句,直接检索或是篡改数据库数据信息[1]。与此同时,只要涉及构造SQL语句的步骤,都可能会有潜在类型的攻击风险隐患问题,主要原因就是SQL具有多元化的特点,构造过程中采用的编码方式非常丰富,SQL注入的方式就是在参数内插入代码,此类参数会被置入命令中执行,如果在SQL语句构造期间不能科学合理地进行攻击的防御,将会导致攻击者将攻击代码插入字符串内,再将字符串保存到数据库系统中,或者是将字符串当作元数据,使其进入到SQL命令内执行恶意代码,如果不能动态性审查分析SQL语句参数的内容,攻击者就会对后台SQL语句进行修改处理,获得相应的权限,在服务器和操作系统相互交互的过程中,获得操作系统组件的权限,对整体操作系统造成危害[2]。
1.2.2 攻击流程
SQL注入攻击的形式非常复杂烦琐,具体的流程如图1所示。首先,攻击者会对SQL注入存在漏洞的网站进行访问,明确具体的注入点,按照实际情况进行注入语句的构造,之后将所构造的语句与程序内的语句有机整合,形成新的语句。其次,新的语句输入到数据库系统内,数据库系统执行新语句之后被攻击。
图1 SQL注入攻击流程
1.3 SQL注入攻击类型
SQL注入攻击的类型较多,主要涉及以下几点:其一,未能准确进行转义字符过滤而引发的攻击。用户在web应用系统内所输入的字符没有经过转义字符过滤,就可能会引发注入攻击的安全隐患。因为没有进行过滤转义的字符,可能会成为传递注入攻击SQL语句的载体,导致数据库被攻击,数据库中的数据信息被操纵。其二,没有准确进行字段类型处理而出现的攻击问题。如若用户所提供的字段没有经过科学合理的类型处理,不是强类型,或者是未能进行类型强制,就会导致出现攻击的问题,例如SQL语句内所应用的数字段缺少合法性,并非强类型,就会引发注入攻击的安全风险问题。其三,数据库服务器存在漏洞而引发的攻击问题。如果数据库服务器软件系统有漏洞问题,存在函数漏洞或是其他漏洞,会为攻击者留下攻击的空间,可能会导致攻击者按照服务器漏洞情况进行SQL注入攻击。其四,盲目类型的攻击问题。通常在web应用程序容易受到攻击,但是攻击结果对攻击者不可见,就会导致出现盲目SQL注入攻击的问题,例如:网页存在漏洞,不会将数据信息显示出来,攻击者需要结合注入合法语句之内逻辑语句的结果,将各类内容显示出来,此类攻击耗费的时间很长,需要为了获得web应用系统中不同字节而构造不同的新语句,但是如果攻击者能够确定漏洞位置或是目标信息,就会快速自动化进行攻击,导致网络安全受到威胁。其五,条件性差错类型的攻击问题。整体应用系统内如果WHERE语句属于真实存在的部分,攻击者就可能会注入一个会使得数据库判断错误的语句,引发SQL错误的问题,如:SELECR-I/O-FROM-users-WHEREusername=“Ralph”,如若用户Ralph存在,那么此情况下被零除将会引发错误。其六,时间延误类型的注入攻击问题。对于时间延误的注入攻击问题来讲,其主要是导致SQL引擎执行很长的队列、很长的时间延误语句,攻击者对页面加载的时间进行分析和衡量之后,明确注入的语句内容,将语句注入之后进行攻击[3]。
2 SQL注入攻击防御措施
2.1 技术层面攻击防御
2.1.1 合理进行编程
编程过程中攻击问题的防御,主要就是在程序编写期间进行漏洞的封堵,强化安全风险问题的防范力度,遵循少特权的原则和多检验的原则,按照具体的方案要求处理,例如:制定对客户端提交信息进行封装的方案内容、制定敏感字符或是字符串的替换删除方案内容、制定对出错信息进行全面屏蔽的方案内容、制定服务器正式处理以前检验分析、提交数据合法性的方案内容,各类方案之间相互弥补,确保编程过程中能够有效防范SQL注入攻击的问题。与此同时,在实际编程的过程中需要注意,应以提交数据合法性的检验分析为基础,设置客户端层面和服务端层面的检验模式,只要任何一端检验结果没有通过相关的要求,就不会将提交的数据介入到query语句内,不会对系统产生攻击。且客户端与服务端的信息数据合法性检验函数存在一定的相似和相同之处,有效完成客户端信息数据内容合法性检验之后,能够降低网络流量、减轻服务器所承受的负荷,准确区分一般误操作类型的问题、低等级和高等级类型的攻击问题等,但是对于有丰富经验的攻击者,会快速绕开客户端信息数据的合法性检验,将所提交的数据直接发送给服务端。因此,在系统编程期间,就需要设置服务端的二级检验部分,以此确保能够快速识别和检验SQL恶意攻击的信息,设置攻击的备案内容,提出相应的警告信息,有效维护系统的安全。
2.1.2 数据库的合理配置
在数据库配置的过程中应考虑到数据库管理系统普遍会提供安全性的配置项,准确进行此类配置项的配置,能够有效增强整体系统的攻击防御性能。因此,在技术层面应重点关注数据库的配置,最高程度上预防发生SQL注入攻击的问题。例如:在数据库配置的过程中设置SQL Server,需要做好以下几点工作。
(1)账号密码的合理设置
SQL Server具备超级用户的账号,主要的用户名称为SA,这个用户名称不可以被删除或者是修改,因此在实际处理期间需要重点进行该账号的保护和维护。在数据库系统中不会直接使用此类账号,而是重新建设和这个账号权限相同的超级用户,对数据库进行管理,其他的用户只需要按照具体分配的情况获得权限,不能留下多余的权限。同时,为不同的用户设置非常复杂且安全度很高的密码,定期进行密码的修改,这样在一定程度上能够有效维护数据库系统的安全,预防发生攻击的问题[4]。
(2)通过Windows的身份进行验证处理
SQL Server在实际应用的过程中,认证模式涉及混合身份类型、Windows身份类型两种。为了能够有效预防出现SQL攻击的风险问题,需要采用Windows身份认证的方式,主要是因为此类认证方式能够进行域用户和其他用户连接的限制,有效维护SQL Server不会受到因特网工具的攻击或是伤害,服务器还能从Windows的安全管控机制中获得更多的效益。
(3)对存储过程进行扩展
SQL Server的存储过程主要就是为用户提供数据信息存储的服务,在实际配置的过程中应重点进行存储过程的扩展,提示存储期间部分无用、没有价值的应用分布情况,删除不必要的数据信息存储过程,以免为黑客留下破坏或是攻击系统的可乘之机。例如:xp-cmdshell存储期间需要禁用,主要原因是在存储过程中会使系统管理工作人员通过操作命令、运行解释器的形式等,进行预定命令字符串的执行,通过文本形式返回输出的内容,属于功能较为强大的扩展存储操作。通常黑客在进行SQL Server攻击的过程中,会利用执行xp-cmdshell扩展命令的方式进行数据库的破坏,因此为了维护整体系统的安全性,需要禁用xp-cmdshell,确保整体数据库和网络系统的安全水平有所提升[5]。
2.2 管理层面攻击防御
SQL注入攻击会对网络应用程序和数据库系统的安全性造成危害,因此在对网络安全进行管理的过程中,需要以有效预防和杜绝SQL注入风险为目的,制定较为完善的制度,培养优秀的安全风险防范人才队伍。首先,制定预防SQL注入攻击的管理制度,在制度中要求网络管理人员和系统管理人员全面分析攻击问题和风险问题的发生原因。按照具体的问题原因深入研究和探讨如何进行风险的防御,采用科学有效的措施防御相关的风险问题,等待系统管理人员和技术人员完成相关工作之后,全面落实有关的考核评价制度,对所有人员的工作情况进行全面考核分析,一旦发现工作人员没有科学合理防御SQL注入攻击风险,就要进行严格的惩罚,以此提升每位人员工作的责任感和积极性[6]。其次,建设高素质的技术人才队伍,聘用专业素质和标准规范的优秀人才,要求工作人员全面掌握SQL注入攻击风险防范的专业知识和技能技巧,游刃有余地完成相关的风险防控工作。对于现有的技术人员也需要阶段性进行培训,通过培训的方式提升人员的SQL攻击风险防御能力和专业水平,为整体风险的有效防控提供人员保障。
3 SQL注入攻击整体防治
由于SQL注入攻击对整体网络系统和数据库系统会造成严重的危害,因此在实际工作中需要重点进行攻击问题的整体防治,通过科学合理的防治方式预防注入攻击对系统造成的安全危害和损害[7]。
3.1 严格进行权限的区分
系统权限设置的过程中,应将终端用户当作是软件的使用主体,无须提供数据库建立权限和删除权限,此情况下即使用户所采用的SQL语句内存在嵌入类型的恶意代码,但是受到权限的影响也无法执行相关的代码,可避免发生恶意攻击的问题,同时需按照系统的运行特点,将普通用户和管理人员用户相互区分,合理设置二者的权限,最高程度上避免SQL注入攻击所带来的影响。
3.2 科学运用参数化语句
在对SQL语句进行编写的过程中,用户所输入的变量不可以直接嵌入语句内,需要利用参数进行变量的传递,这样才能预防发生SQL注入攻击的问题。简而言之,用户所输入的参数不可以直接当作系统的SQL语句进行嵌入,而是要对用户所输入参数和数据进行过滤处理,或是采用参数化语句方式进行用户输入变量的传递,对语句参数化处理之后[8],确保所有嵌入SQL的语句都能符合法律规范和安全要求,有效规避相关的安全风险隐患问题。
3.3 强化用户输入方面的验证力度
从总体层面而言,SQL注入攻击防御的过程中,主要是使用用户输入内容、检验方式或是迫使应用参数化语句传递用户输入内容的方式。在整体数据库系统运行的过程中,很多对用户输入内容进行检验和分析的工具不能为管理人员提供防御攻击问题的辅助,例如:采用相关的验证工具,能够对字符串变量信息进行测试分析,只按照系统运行需求接受所需的数据值,拒绝接受二进制类型、注释类型的数据字符,这样在一定程度上能够规避脚本注入的攻击现象,预防部分缓冲区域出现溢出攻击的问题[9]。另外,还需进行用户所述内容类型和大小的测试研究,强制性执行相关的转换操作和限制操作,不仅能够避免恶意攻击而导致缓冲区溢出的现象,还能进一步提升注入攻击问题的防御效果,促使系统的安全运行。
4 结语
综上所述,SQL注入攻击的流程非常烦琐复杂,多数情况下是因为用户输入字符信息或者是系统存在漏洞而引发。因此,为了能够有效防御SQL注入攻击的问题,制定完善的技术层面攻击防御方案,可以进行程序的编程和数据库配置,同时编制完善的管理制度,建设专业素质较高的人才队伍,采用科学的方式进行SQL注入攻击的整体防治,确保系统可以安全、良好、稳定可靠运行。