2012-03-22 85 views
1

最近,对XSS及其预防方法产生了兴趣。 大部分的XSS预防技术都集中在对无效字符的输入进行消毒并使用它们。这就产生了一个问题:XSS攻击 - 消毒输入vs拒绝

当很明显目的确实是XSS攻击时,为什么我们试图去除无效字符,然后继续使用输入,而不是直接拒绝输入,并发送用法到错误页面?

确定每个人都会想到这种方法,但不知何故焦点在于输入验证,筛选和重用,而不是拒绝。为什么?我在这里错过了什么?

+0

XSS比“无效字符”更多。 – 2012-03-22 18:33:58

+0

@Diodeus:请您详细说明一下吗?在我的情况下,我希望我的应用程序中只有一个参数,并且要求是这将是字母数字并且没有任何特殊字符。因此,如果我找到任何特殊字符,我打算直接将用户发送到errorPage而无需进一步处理或存储。这不会照顾XSS吗? – Raghav 2012-03-22 19:02:13

+0

XSS =跨站点脚本。这是您在页面上允许第三方内容的地方。此第三方内容会劫持您的页面。消毒输入和XSS是两个完全不同的主题。 – 2012-03-22 19:13:48

回答

1

我使用的规则是,我使用输入验证,以确保数据是有效的根据域。如果我期待一个数字并得到一串字母,我会拒绝它。但是,如果我有一个可以包含任何内容的文本字段(比如堆栈溢出评论),输入验证和拒绝几乎是不可能的。所以现在我需要清理/输出编码。

1

,因为大多时候输入错误您已经显示错误页面

例如

page.php?id=a33 

"select * from table where id = ".((Int)$_GET['id']); 

了“民行”值是0,因为你正在寻找:

"select * from table where id = 0"; 

加上某些情况下的任何字符串,即使损坏可用于程序将要执行的操作,例如搜索字符串...

再次,不要做任何事情都可能令用户感到沮丧。更好,如果消毒并显示警告,如果一些数据丢失

+0

我同意,如果输入错误,我们会向用户显示错误页面。但是,当我们向用户重新显示unsanitized输入时,XSS进入画面。所以,如果我们不打算重新显示给用户,那么我们为什么要打扰它的消毒?请注意,我的假设是,如果您希望以某种格式输入,但输入含有恶意代码,则可以安全地假定它是劫机者。 – Raghav 2012-03-22 19:06:12

+0

不是,因为在某些系统上,在某些浏览器上,在某些其他星系中,由于客户端的配置错误或服务器配置不当,可能会导致误报。一般来说你是对的。但更好的不要给劫机者提示,恕我直言...我的意思是写“你输入了空字节,所以请求将被跳过”帮助劫持者排除所有基于空字节的攻击...所以,静静地做。 – skyline26 2012-03-22 19:18:01

+0

+1的建议 – Raghav 2012-03-23 14:29:01