此 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.

之前执行