4

我有一个页面,它从查询字符串中的参数重定向到一个 url,例如:
page.html?redirectUrl=index.html
在页面内我有这样的代码:
window.localtion.href = redirectUrl;
通过参数使用重定向 url 是必需的。该页面包含安全的敏感数据。有人可以使用 javascript 制作 URL,例如:
page.html?redirectUrl=javascript:alert(document.getElementById("password").value)
并且可以窃取安全数据。

如何防止绕过 javascript 代码到 window.localtion.href?

4

2 回答 2

1

您可以尝试将 URL 放入锚元素并检查协议:

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

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

但是,我不确定浏览器对此的支持有多好,因为 MDN 将其列为 HTML5 功能。

于 2013-01-08T16:34:51.590 回答
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 来清理输入。如果您正在处理非常敏感或重要的数据,强烈建议您使用服务器端语言来验证和清理您的输入。

于 2013-01-08T16:28:24.703 回答