javascript只允许重定向同一域内的URL
我有一个javascript,它通过设置javascript只允许重定向同一域内的URL,javascript,jquery,url,redirect,Javascript,Jquery,Url,Redirect,我有一个javascript,它通过设置 window.location = url; 其中“url”由GET参数提供。 这听起来很糟糕,因为它允许在当前域之外重定向 因此,我想知道是否有一种简单而安全的方法来检查“url”是否是同一域中的绝对url,并且只允许在这种情况下重定向。 目前我只是检查url是否以“/”开头,并且不包含“http”,但我不确定它是否足以完全防止打开的重定向 if (url[0] === '/' && url.indexOf('http') === -
window.location = url;
其中“url”由GET参数提供。
这听起来很糟糕,因为它允许在当前域之外重定向
因此,我想知道是否有一种简单而安全的方法来检查“url”是否是同一域中的绝对url,并且只允许在这种情况下重定向。
目前我只是检查url是否以“/”开头,并且不包含“http”,但我不确定它是否足以完全防止打开的重定向
if (url[0] === '/' && url.indexOf('http') === -1)
{
window.location = url;
}
当我在客户端这样做时,我知道它仍然不完美,但以前根本没有保护
我可以使用好的旧JS或jquery。我还必须支持IE9
后期编辑:也许我提得不够清楚,但“url”应该是一个绝对url,没有域规范。
例如,我有这样的地址(完整地址,末尾带有url参数):
我需要避免:
这就是为什么我在上面说,我现在检查它是否以“/”开头,但我不确定它是否足够安全。所以我不能采纳你的一些建议
谢谢您可以使用(相当新的)Api:
您可以从服务器发出HTTP 307临时重定向,而不必担心客户端代码吗?这样看起来更安全。 否则,javascript也可以检查window.location.hostname
编辑:如果您只允许相对URL,那么在开始时检查“/”应该是相当安全的,只要您100%确定它是URL,但是,您甚至可以将window.location.hostname添加到开头,以绝对确保您消除了语义欺骗的可能性。您可以使用window.document.domain获取当前域名,并检查GET操作提供的url是否具有此功能
抱歉,最好是评论,但没有足够的权限 任何应该是评论的内容都不应该是答案。谢谢,我已经编辑了这个问题。也许我不够清楚,但是提供的url不应该包含域,只有开头带有“/”的绝对url。谢谢,我已经编辑了这个问题。也许我不够清楚,但是提供的url不应该包含域,只包含开头带有“/”的绝对url。你是指相对url?我正在调整我的答案以提出建议。谢谢,很高兴知道。不幸的是,我必须支持IE9和其他非常旧的浏览器。我已经编辑了这个问题。
var redirUrl = "http://www.somewebsite.com/some/path";
var currentHost = location.host;
if (new URL(redirUrl).host != currentHost)
return false;