javascript客户端DOM开放重定向

javascript客户端DOM开放重定向,javascript,security,url,redirect,xss,Javascript,Security,Url,Redirect,Xss,我在扫描下面的代码时发现客户端DOM Open重定向安全问题。 这个问题显示了我在哪里初始化变量“myPath”和“myHost” 我无法理解这对网络钓鱼攻击的开放性以及如何修复它。 有人能帮忙吗 var query = this.value; var myPath = window.location.href.substring(window.location.href.indexOf("/myapp"), window.location.href.indexOf(".html")); va

我在扫描下面的代码时发现客户端DOM Open重定向安全问题。 这个问题显示了我在哪里初始化变量“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时,会发生什么情况,从而影响结果,另外一个允许(部分)控制url栏的漏洞也会影响结果,这可能是SPA之类的情况。因此,问题中没有足够的信息来决定它是否真正安全

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


url栏是一件棘手的事情,因为它是用户输入,但攻击者没有完全控制权——他必须点击应用程序页面,否则无法加载此javascript。静态扫描器标记这一点的原因仍然是,攻击者可能有一些控制权,对于javascript严重的单页应用程序,可能更多的原因是所有url栏操作都在进行。

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

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

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

url栏是一件棘手的事情,因为它是用户输入,但攻击者没有完全控制权——他必须点击应用程序页面,否则无法加载此javascript。静态扫描器标记这一点的原因仍然是因为攻击者可能拥有一些控制权,并且在使用大量javascript的单页应用程序的情况下,可能更多一些,因为所有url栏操作都在进行中