这段代码如何防范XSS攻击?

时间:2012-06-16 17:43:17

标签: node.js xss security

我正在使用验证库,从我的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。

所以我的问题是:这种替代防御是什么样的攻击媒介?

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

2 个答案:

答案 0 :(得分:1)

  

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

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

似乎是Security through obscurity:它正在尝试用&替换所有xss_hash(),以便查询的可读性降低。我猜这个库中有一部分可以解除这个问题(即将字符串中的所有xss_hash()视为&用于解析)。

答案 1 :(得分:0)

有问题的代码“受保护的查询字符串变量”通过用随机字符串替换&分隔URL参数,然后执行一些其他处理,删除或以其他方式破坏&符号。正如Jay Shah指出的那样,下面的代码意味着要替换查询字符串&符号,但另一个错误是阻止它按预期工作。