您的位置:首页 > 数据库

SQL 注入

2014-04-19 17:14 183 查看
考虑一个带有自定义登录表单的应用,其中包括用户名和密码。系统为了对用户进行身份验证,向数据库发送这样一条查询:“用户X 的密码是否是 Y?”如果此查询的结果为真,

则用户X 就通过了身份验证。如果结果为假,用户将被拒绝。 现在,假设服务器端并未执行合理的验证,允许某些人创建以下查询:“用户X 的密码是否是Y 或者我能否输入 X 作为用户名?”6 此时不是简单地将 Y 作为密码提供,在将此视为一条查询时,恶意用户可确保查询始终返回真。

示例1 登录Web 应用的SQL 查询

SELECT userid, full_name

FROM members

WHERE username = 'X' AND password = 'Y'

为成功攻击此查询,攻击者必须确保所提供的输入能突破当前预定义的SQL 查询命令集(SELECT、FROM、WHERE、AND),并插入攻击者自己的命令。只要攻击者能够突

破预定义的结构,即可操纵查询,返回其希望的结果。攻击者将获得与执行 SQL 命令的进程相同的权限,随后即可对您的数据库执行各种操作。现在,假设服务器不会执行任何验证,用户名和密码字段的所有输入都会直接重定向到X 和 Y。那么攻击者即可使用单引号来突破预定义的命令并注入攻击者自己的命令,从而确保此查询总是返回真。在 Y 中注入恶意输入可能会导致类似于示例2 所示的查询,始终保证攻击者通过身份验证。

示例 2 破坏SQL 查询的恶意输入

SELECT userid, full_name

FROM members

WHERE username = 'X' AND password = 'Y' OR 'X' = 'X'

攻击者能通过向SQL 查询注入恶意输入而实现的操作实际上是无限的。基本上,攻击者具有与执行查询的进程相同的访问权限,可以完成此进程能够执行的任何操作。为了攻击

您的组织,攻击者会创建多种输入值,试图发现您的查询中允许使用哪些字符。此后,攻击者会尝试了解数据库结构,利用这样的认识来获得表名称、用户名和密码。攻击者甚至

可能会破坏整个数据库。如果您的企业没有对攻击者来说有价值的数据,那么攻击者可利用SQL 注入攻击,将恶意软件注入您的页面,利用您的网站作为传播平台,攻击您的网

站的访问者。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: