客户端 DOM 打开 javascript 的重定向

Client DOM Open Redirect for javascript

我正在获取客户端 DOM 扫描以下代码时打开重定向安全问题。 问题出现在我初始化变量 'myPath' 和 'myHost'.

的地方

我无法理解网络钓鱼攻击如何开放以及如何修复它。 有人可以帮忙吗?

var query = this.value;

var myPath = window.location.href.substring(window.location.href.indexOf("/myapp"), window.location.href.indexOf(".html"));
var myHost = window.location.href.substring(0, window.location.href.indexOf("/myapp"));
query = encodeURIComponent(query);

if(myPath!==null){
    query = query + "mysite:" + myHost + myPath;
}

问题是您正在获取用户输入(来自 url 栏的值)并重定向到它。这可能会或可能不会在任何有意义的攻击中被利用,但静态扫描器不了解您的应用程序逻辑 - 对于静态扫描器,它只是将直接用于重定向的用户输入。

根据问题中的信息,我想不出有效的攻击,因为我认为它只是使 url 与用户已经访问过的相同,而没有 .html最后,如果有的话,也没有 # 部分。所以我认为用户将被重定向到他已经访问过的页面。但是,这并不代表没有漏洞,这还取决于其他相关代码。例如,当用户可以使用此代码访问页面时会发生什么,而 url 栏中没有任何 .html 会影响结果,另一个允许(部分)控制 [=26] 的漏洞也会影响结果=] bar,类似 SPA 的可能场景。所以问题中没有足够的信息来决定它是否真的安全。

至于修复,请确保您只重定向到您想要的位置,而不是任何用户输入。例如,主机部分(甚至可能是路径)可以由服务器写入页面,但我知道对于像 SPA 这样的东西来说情况并非如此。您可以实施白名单验证以确保不会发生恶意重定向。也许它已经很好了,在这种情况下,您可以在您使用的扫描仪中将此发现设置为缓解,但请考虑边缘情况,以及攻击者如何滥用它。他可以在路径中用# 来欺骗这个吗?他可以从没有 .html 的 url 加载带有此代码的页面吗?或者有过多次?如果他注册了一个像 someattack.html.hisdomain.com 这样的域并且有一个有效的用户访问它怎么办? :)

url 栏是一个棘手的事情,因为它是用户输入,但攻击者没有完全控制权 - 他必须点击应用程序页面,否则 javascript 不会加载。这仍然被静态扫描器标记的原因是因为攻击者可能有 一些 控制权,并且在 javascript-heavy 单页应用程序的情况下,可能更多是因为所有 url 条形图操作都在进行。