Javascript Java脚本中可能存在XSS攻击

Javascript Java脚本中可能存在XSS攻击,javascript,dom,xss,fortify,Javascript,Dom,Xss,Fortify,Fortify on demand向我展示了这行代码可能存在的XSS问题 if (window.location.search != '') { window.location.href = window.location.href.substr(0,baseurl.length+1)+'currencyCode='+event.getCurrencyCode()+'&'+window.location.href.substr(baseurl.length+1); } else

Fortify on demand向我展示了这行代码可能存在的XSS问题

if (window.location.search != '') {
    window.location.href = window.location.href.substr(0,baseurl.length+1)+'currencyCode='+event.getCurrencyCode()+'&'+window.location.href.substr(baseurl.length+1);
} else {
    window.location.href = window.location.href.substr(0,baseurl.length)+'?currencyCode='+event.getCurrencyCode()+window.location.href.substr(baseurl.length);
} 
我远不是JavaScript专家,但我需要修复这段代码


您能提供帮助吗?

我认为Fortify已经发现event.getCurrencyCode可以是任意长度的字符串,并且可能包含跨站点脚本攻击,该攻击可能会将不知情的用户发送到恶意站点,或者导致浏览器加载对用户有害的JavaScript。您可以通过查看Fortify的Audit Workbench工具中查找结果的details选项卡来了解这一点

假设event.getCurrencyCode可能提供潜在的恶意数据,则需要在事件来源时或在此代码中验证此值。我敢打赌,这个应用程序中货币代码的频谱值相对较小,并且每个都是有限长度的,因此应该可以直接使用Javascript内置的regex功能将该值列入白名单

现在的情况是,如果事件提供,JavaScript将很乐意在URL中添加一个几乎无限长的字符串,并且使用UTF-8字符集,攻击者可以进行很多内联JavaScript操作,等等


希望这有帮助。祝你好运

不幸的是,现有的答案是错误的,艾薇·林克斯的评论并没有真正解决这个问题

Fortify On Demand正在报告数据流漏洞。在这种情况下,某些数据来源于程序员之外的任何地方,并反映到不知情的最终用户的浏览器

潜在危险数据来自:

event.getCurrencyCode 您还没有发布足够的源代码让我们知道这是什么,但是一个很好的猜测是,该函数应该只返回ISO货币代码,或者更确切地说是三个大写字母。欧元或日元等。注意,我在这里做了一个很大的假设;我看不到代码

潜在的危险数据最终进入浏览器的位置

问题是开发人员无法保证将发送什么事件,或者该货币代码中可能会出现意外数据

最简单的修复方法是将event.getCurrencyCode的返回值转换为保证的三个大写字母。没有已知的攻击可以用三个这样的大写字母表示。因此,您可以替换:

event.getCurrencyCode 与

/^[A-Z][A-Z][A-Z]$/.exec event.getCurrencyCode 参考:

当且仅当event.getCurrencyCode解析为三个大写字母(如USD)时,这将正确构建URL。否则,null将进入URL中预期使用货币代码的位置


显然,您需要与真正的JavaScript开发人员合作来实现这样的修复,这样就不会出现进一步的问题。

代码试图更改当前窗口的url。这很糟糕,因为用户可能无法控制代码将他们带到哪里。尝试将href构建到一个变量中,然后在用户有意操作(如单击按钮)时,将href应用于window.location。如果这不起作用,您可能只需要使用超链接或打开选项卡或窗口的东西,而不是更改当前窗口指向的位置。它也有可能触发XSS警报,因为您为构建href而获取的值是跨域的。