2013-01-08 29 views
4

我有喜欢它重定向到URL从参数查询字符串页:
page.html中的redirectUrl = index.html的
的页面里面,我有这样的代码:
window.localtion.href = redirectUrl;
这是要求使用参数重定向url。该页面包含安全敏感数据。有人可以使用JavaScript这样的网址:
page.html?redirectUrl = javascript:alert(document.getElementById(“password”)。value)
安全数据可以被盗。

如何防止绕过javascript代码到window.localtion.href?防止使用JavaScript的window.location的

+0

在这种情况下,谁会窃取数据?用户?无论如何,他们可以在页面上获取任何数据。 –

+3

@Pekka웃 - 用户(爱丽丝)可以从Malory's(攻击者)网站上链接到Bob的网站。这是一个经典的XSS攻击。 – Quentin

+0

@Quentin啊,现在明白了,谢谢。 –

回答

1

这似乎是它会只要你不被它重定向工作:

的Javascript:

var field = document.getElementById("redirectUrl"); 
var newValue = String(field.value); 
alert(newValue); 

基本上,使用String构造函数来“消毒”的输入。

这可能会帮助更多的其他情况:

https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

总体来说,我不会使用JavaScript来净化输入建议。如果您处理真正敏感或重要的数据,强烈建议您使用服务器端语言来验证和消毒输入。

1

你可以尝试把URL中的anchor element和检查的协议:

var anchor = document.createElement("a"); 
anchor.href = redirectUrl; 

if(anchor.protocol != "javascript:") { 
    window.localtion.href = redirectUrl; 
} 

但是,我不知道该浏览器的支持有多好这一点,因为MDN列出了它作为一个HTML5功能。