此 javascript 代码是否易受基于 DOM 的 xss 攻击
Is this javascript code susceptible to DOM based xss
我有一个包含如下代码的网络应用程序:
If (window.location.href.indexof("test") != -1) {
window.location.href = document.referrer;
}
如果我在 url 中输入 ?test 或其他内容,我可以轻松触发此条件,但它只是重定向到自身并基本上循环...我的问题是我可以通过操纵 javascript document.referrer 变量,或者该值是否可以轻松更改?
我尝试代理请求并更改 http header 但似乎 javascript 没有从 http header.
中获取值
或者说这个方法很糟糕,不应该使用。
Trustworhty 用户代理不允许修改 referer Header,除非您明确允许他们使用 Access-Control-Allow-Headers(永远不要这样做!)。用户代理可能有一些功能来防止 referer Header 被篡改,但是 akaik 你的方法实际上应该改变了 document.referrer
如果你做得正确(结果证明这是无关紧要的,但是我们稍后会看到上)。
document.referrer
的值不受简单 document.referrer = "my new referrer"
的影响,但容易受到这段代码 Object.defineProperty(document, "referrer", {get : function(){ return "my new referrer"; }});
的攻击。
因此,您不得允许此类代码在相关页面上执行,否则攻击者将控制您被重定向到的位置。不幸的是,这意味着只有在 每个 使用它的页面完全 免受 XSS 攻击时才能使用此方法。否则,您的重定向代码 保证 在任何 XSS 注入 javascript.
之前执行
我有一个包含如下代码的网络应用程序:
If (window.location.href.indexof("test") != -1) {
window.location.href = document.referrer;
}
如果我在 url 中输入 ?test 或其他内容,我可以轻松触发此条件,但它只是重定向到自身并基本上循环...我的问题是我可以通过操纵 javascript document.referrer 变量,或者该值是否可以轻松更改?
我尝试代理请求并更改 http header 但似乎 javascript 没有从 http header.
中获取值或者说这个方法很糟糕,不应该使用。
Trustworhty 用户代理不允许修改 referer Header,除非您明确允许他们使用 Access-Control-Allow-Headers(永远不要这样做!)。用户代理可能有一些功能来防止 referer Header 被篡改,但是 akaik 你的方法实际上应该改变了 document.referrer
如果你做得正确(结果证明这是无关紧要的,但是我们稍后会看到上)。
document.referrer
的值不受简单 document.referrer = "my new referrer"
的影响,但容易受到这段代码 Object.defineProperty(document, "referrer", {get : function(){ return "my new referrer"; }});
的攻击。
因此,您不得允许此类代码在相关页面上执行,否则攻击者将控制您被重定向到的位置。不幸的是,这意味着只有在 每个 使用它的页面完全 免受 XSS 攻击时才能使用此方法。否则,您的重定向代码 保证 在任何 XSS 注入 javascript.
之前执行