我有一个页面,它从查询字符串中的参数重定向到一个 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?
问问题
2648 次
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 回答