我正在使用验证库,从我的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(它只“保护”一个参数,而不是所有参数),在我看来整个事情是本身一个bug。
所以我的问题是:这种替代防御是什么样的攻击媒介?
如果它没有真正做任何事情,我想提交一个补丁到项目完全删除它。如果它合法地保护了图书馆的用户,我想提交补丁来修复现有的错误。
答案 0 :(得分:1)
xss_hash
返回一串随机字母数字字符。
它们是绝对随机的,还是基于可计算数据生成的?
似乎是Security through obscurity:它正在尝试用&
替换所有xss_hash()
,以便查询的可读性降低。我猜这个库中有一部分可以解除这个问题(即将字符串中的所有xss_hash()
视为&
用于解析)。
答案 1 :(得分:0)
有问题的代码“受保护的查询字符串变量”通过用随机字符串替换&
分隔URL参数,然后执行一些其他处理,删除或以其他方式破坏&符号。正如Jay Shah指出的那样,下面的代码意味着要替换查询字符串&符号,但另一个错误是阻止它按预期工作。