0%

SQL注入漏洞

背景

随着互联网web和信息技术的发展,在web后端作为存储和管理的的数据库也得到了广泛的应用,与web结合较为紧密的数据库包括Mysql,Sqlserver,Oracle,Sqllite,Db2,Access等等。 数据存储和管理作为应用的一个基本需求,在绝大多数的应用里都得到了使用,这种大面积的使用也意味着在数据库操作方面如果处理不当出现问题的可能性会很大,另外一方面由于数据库承载了应用的数据信息,如果数据库出现问题一方面可能导致敏感数据的泄露和篡改(如信用卡账户,用户密码,管理账户和密码,销售记录等等),直接导致损失和应用被攻陷,另外一方面,即使数据库中不承载较为敏感的信息,由于数据库的特殊性,数据库被攻击的话也可以直接导致应用程序崩溃及其他严重的后果。

漏洞成因

应用为了和数据库进行沟通完成必要的管理和存储工作,必须和数据库保留一种接口。目前的数据库一般都是提供api以支持管理,应用使用底层开发语言如Php,Java,asp,Python与这些api进行通讯。对于数据库的操作,目前普遍使用一种SQL语言(Structured Query Language语言,SQL语言的功能包括增删查改等,是一个综合的、通用的关系数据库语言,同时又是一种高度非过程化的语言,只要求用户指出做什么而不需要指出怎么做),SQL作为字符串通过API传入给数据库,数据库将查询的结果返回,数据库自身是无法分辨传入的SQL是合法的还是不合法的,它完全信任传入的数据,如果传入的SQL语句被恶意用户控制或者篡改,将导致数据库以当前调用者的身份执行预期之外的命令并且返回结果,导致安全问题。 那么恶意用户如何才能控制传入的SQL语句呢?我们知道,既然传入的SQL是以字符串的方式传入的,这个字符串由应用生成,那么如果应用生成这个字符串的方式不对就可能导致问题,譬如考虑如下的功能:

阅读全文 »