2017-09-08 249 views
0

安全补丁我有下面的js代码为window.location.href

var a = window.location.href.substring(0,window.location.href.lastIndex('/')+1) + "logout.jsp"; 

setTimeout(function(){ 
     window.location.href = a; 
},1000); 

当我运行上述文件设防扫描,它显示与动态代码评估上述线路存在安全隐患:代码注入。 现在我无法理解如何解决它。我是否需要为window.href添加任何编码器或如何解决此问题。 另外,如果我们有编码,我需要做什么。

+1

我真的不知道如何利用它来注入任意代码,因为'location.href'是由您的服务器生成的(除非URL的某些部分来自任意用户输入)。但是,您的代码可以减少只是''location.href =“logout.jsp”'它做同样的事情。 –

+1

@Derek朕会功夫在这种情况下,我也看不出注射是如何发生的。但是有人可以在URL中的'#'之后推送JS,如果处理不当,可能会产生问题。因此,可能该工具每次看到'window.location.href'被操纵时报告误报。 – Nisarg

+0

您的Javascript代码是否直接驻留在HTML页面或单独的js文件中? –

回答

1

如果我正确理解逻辑,您正尝试获取没有页面名称的url路径,然后您打算重定向到它。

如果这是正确的,你也许可以得到它使用工作,

var a = "logout.jsp"; 

setTimeout(function(){ 
     window.location.href = a; 
},1000); 

应该在主要摆脱脆弱的,但我不能完全肯定,如果该工具检测到任何其他漏洞在里面。

0

我发现下面的链接...也许这可以帮助你:

https://security.stackexchange.com/questions/151806/jquery-js-dynamic-code-evaluation-code-injection-on-settimeout-line

这是一个假阳性。

使用HP Fortify和has confused developers before报告虚假代码注入漏洞是众所周知的问题 。 Fortify 对Javascript代码进行了基本的静态分析,无法深入了解它是如何工作的。作为@AlexanderOMara 建议,它只是似乎发现潜在危险 setTimeout()功能,可作为setInterval(),采取将作为代码执行的字符串 的说法,就像eval()一样。这 排序漏洞,该工具旨在发现:

setTimeout('alert(' + document.location.hash.split('#')[1] + ')', 0); 

但在你的情况下,没有用户提供的,未经过滤的输入 setTimeout()功能,因此它看起来是安全的。从 离开你从链接线程得出一个很好的结论:

我的建议是停止运行惠普fortify报告。 或支付5000美元,或任何美元去他们的班,所以你可以真正了解他们的malarkey。

通过回答Arminius