Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript只允许重定向同一域内的URL_Javascript_Jquery_Url_Redirect - Fatal编程技术网

javascript只允许重定向同一域内的URL

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') === -

我有一个javascript,它通过设置

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;