哈尔滨商业大学论坛

 找回密码
 注册(开放注册)
搜索
查看: 338671|回复: 2
打印 上一主题 下一主题

[应用技术] 正确过滤转义字符在SQL中的重要作用

[复制链接]
跳转到指定楼层
1#
发表于 2011-5-31 17:22:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
正确过滤转义字符在SQL中的重要作用

在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句。这样就会导致应用程序的终端用户对数据库上的语句实施操纵。比方说,下面的这行代码就会演示这种漏洞:

statement := "SELECT * FROM users WHERE name = '" + userName + "';"

这种代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是代码的作者所期望的那样了。例如,将用户名变量(即username)设置为:

a' or 't'='t,此时原始语句发生了变化:

SELECT * FROM users WHERE name = 'a' OR 't'='t';

如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值't'='t永远是正确的。

在一些SQL服务器上,如在SQL Server中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。下面语句中的username的值将会导致删除“users”表,又可以从“data”表中选择所有威客的数据(实际上就是透露了每一个用户的信息)。

a';DROP TABLE users; SELECT * FROM data WHERE name LIKE '%

这就将最终的SQL语句变成下面这个样子:

SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT *

FROM DATA WHERE name LIKE '%';

其它的SQL执行不会将执行同样查询中的多个命令作为一项安全措施。这会防止攻击者注入完全独立的查询,不过却不会阻止攻击者修改查询。
2#
 楼主| 发表于 2011-5-31 17:24:20 | 只看该作者
自己坐沙发
3#
 楼主| 发表于 2011-5-31 17:24:52 | 只看该作者
自己顶一个
您需要登录后才可以回帖 登录 | 注册(开放注册)

本版积分规则

手机访问本页请
扫描左边二维码
         本网站声明
本网站所有内容为网友上传,若存在版权问题或是相关责任请联系站长!
站长联系QQ:7123767   myubbs.com
         站长微信:7123767
请扫描右边二维码
www.myubbs.com

QQ|小黑屋|手机版|Archiver|哈尔滨商业大学论坛 ( 琼ICP备10001196号-2 )

GMT+8, 2024-4-26 12:46 , Processed in 0.104361 second(s), 14 queries .

Powered by 高考信息网 X3.3

© 2001-2013 大学排名

快速回复 返回顶部 返回列表