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 注入攻击,将恶意软件注入您的页面,利用您的网站作为传播平台,攻击您的网
站的访问者。
则用户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 注入攻击,将恶意软件注入您的页面,利用您的网站作为传播平台,攻击您的网
站的访问者。
相关文章推荐
- Sqlserver 锁表处里
- mysql触发器的作用及语法
- oracle存储过程和游标的使用
- ./src/redis-cli --raw 查看存储了utf8的键值
- PostgreSQL数据库创建多字段表以及插入多行数据
- Oracle 新建用户
- sqlserver2005 自动备份的维护计划图解教程
- Redis配置文件参数说明
- pl/sql 本机不安装oracle服务端连接服务器
- 获取当前数据库中的所有表和视图
- Redis配置文件参数说明
- Oracle索引简要介绍
- Oracle中如何插入特殊字符: & 和 ' (多种解决方案)
- 求助:TreeView如何绑定数据库
- orcale PL/SQL管理命令语句
- 内存实时数据库系统用于酒店管理软件解决方案
- hibernate中获取使用mysql当前插入一条记录的id值
- 2014年第一季度Oracle PSU更新(包含10.2.0.4+版本所有PSU信息)
- [Navicat for MySQL系列]Navicat如何使用
- mysqlimport: Error: 13, Can't get stat of '/root/xiaoming/import.data' (Errcode: 13), when using tab