一种轻量级的服务端防SQL注入攻击方法
2019-06-21付熙徐龚希章
付熙徐,龚希章
(上海海洋大学 现代信息与教育技术中心,上海 201306)
SQL注入攻击是通过在应用程序输入中插入部分SQL语句,改变应用程序中实际执行的SQL语句,以达到绕开验证、篡改数据、控制被攻击系统之目的的攻击[1-2]。由于目前很多应用系统采用的都是基于关系数据库通过SQL语句操纵数据的模式,因而SQL注入攻击被视为对Web应用威胁最大的攻击方式之一。
阻止注入攻击的方式通常是对输入进行判断,从而阻止非法字符的输入。然而,如果需要判断的攻击字符串过多,就容易消耗过多的资源,尤其当验证工作在需要处理大量信息的服务器上进行时,将严重影响服务器的性能。为此,本文对注入攻击的原理和注入攻击语句进行了分析,针对不同的输入设定了不同的处理方法,最终使得需要判断的攻击字符集达到最小,从而最大限度地减轻服务器的压力。
1 相关工作
1.1 SQL注入攻击
SQL注入攻击的攻击方法是通过非法输入改变系统中应执行的SQL语句。如下面的语句:
select * from user where username=′user′ and password=′123′
其目的是返回用户表中用户名为“user”,且密码为“123”的用户,通常用于系统用户验证。正常输入为合法的用户名和密码,但如果在密码部分输入如下字符串则可以达到跳过密码验证的目的。
1’ or ‘1’=’1
SQL语句加入该字符串后,变成如下形式:
select * from user where username=′user′ and password=′ 1′ or ′1′=′1′
则失去了校验密码的功能。同理,攻击者也可插入SQL语句对数据和数据库结构进行修改和删除,从而对数据和系统造成严重破坏;更有甚者,攻击者可以通过数据库系统执行操作系统命令,给系统造成更严重的威胁[1]。……