2012-06-16 41 views
0

我正在使用一个验证库,从输入中删除一些常见的XSS攻击到我的Web应用程序。它工作正常,我也逃避了我提供的一切,以防止XSS攻击。此代码如何防范XSS攻击?

该库包含该线路XSS过滤过程的一部分:

// Protect query string variables in URLs => 901119URL5918AMP18930PROTECT8198 
str = str.replace(/\&([a-z\_0-9]+)\=([a-z\_0-9]+)/i, xss_hash() + '$1=$2'); 

xss_hash返回的随机字母数字字符的字符串。基本上,它需要有一个查询字符串的URL,并轧液有点:

> xss('http://example.com?something=123&somethingElse=456&foo=bar') 
'http://example.com?something=123eujdfnjsdhsomethingElse=456&foo=bar' 

除了有一个bug(它只是“保护”一个参数,不是所有的人),在我看来,整个事情是本身一个错误。

所以我的问题是:什么样的攻击矢量是这种替换防护?

如果它没有真正做任何事情,我想提交一个补丁到完全删除它的项目。如果它合法地保护了图书馆的用户,我想提交一个补丁来修复现有的错误。

回答

0

问题“保护查询字符串变量”的代码通过一个随机字符串替换&分离URL参数,做一些其他的处理,将删除或以其他方式撕裂&符号之前。正如Jay Shah指出的那样,下面的代码旨在替换查询字符串&符号,但另一个错误阻止它按预期工作。

1

xss_hash返回一串随机字母数字字符。

它们是绝对随机的还是基于可计算的数据生成的?

它似乎是Security through obscurity:它试图用xss_hash()替换所有的&,这样查询的可读性就会降低。我猜是有一部分库解除了这个问题(即将所有的xss_hash()的字符串作为&进行解析)。

+0

'xss_hash'调用Math.random(),所以它肯定是随机的。但是你是对的 - 我以前没有看到它,但是在它下面有一行代码,用'&'代替'xss_hash()'。但它不能正常工作,因为'xss_hash'是随机的... – chesles