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

标签 javascript jquery url redirect

我有一个 JavaScript,它通过设置来处理“登录后重定向”问题

window.location = url;

其中“url”由 GET 参数提供。 这听起来是一种不好的做法,因为它允许重定向到当前域之外。

所以我想知道是否有一种简单且安全的方法来检查“url”是否是同一域内的绝对网址,并仅在这种情况下允许重定向。 目前我只是检查 url 是否以“/”开头并且不包含“http”,但我不确定它是否足以完全防止开放重定向。

if (url[0] === '/' && url.indexOf('http') === -1)
{
    window.location = url;
} 

当我在客户端执行此操作时,我知道它仍然不完美,但以前根本没有任何保护。

我可以使用好的旧 JS 或 jquery。我还必须支持 IE9。

后期编辑:也许我没有提到得不够清楚,但“url”应该是一个绝对url,没有域规范。 例如我有这种地址(末尾带有 url 参数的完整地址): http://example.com/Account/Login.aspx?ReturnUrl=%2fCheckout.aspx

我需要避免: http://example.com/Account/Login.aspx?ReturnUrl=http://otherdomain/badintention.aspx

这就是为什么我上面说我目前检查它是否以“/”开头,但我不确定这是否足以确保安全。所以我不能使用你的一些建议。

谢谢

最佳答案

您可以使用(相当新的)URL API:

var redirUrl = "http://www.somewebsite.com/some/path";
var currentHost = location.host;

if (new URL(redirUrl).host != currentHost)
    return false;

关于javascript 只允许重定向同一域内的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30173053/

相关文章:

javascript - Node REPL : Why does this variable assignment fail?

javascript - VueJS - 传递函数名和调用的区别

javascript - 在 React 组件中传递字符串化对象作为 prop 比普通 JavaScript 对象更好吗?

javascript - Bootstrap 输入组宽度设置

javascript - 了解 Meteor 何时重新计算我的模板助手

javascript - jQuery inArray() 总是返回 -1

javascript - 如何检测文档中的鼠标点击区域 - jquery - javascript

java - HttpClient 和非 ASCII URL 字符(á、é、í、ó、ú)

angularjs - tomcat http server::add # 到请求的 URL

regex - Django urls.py 正则表达式不匹配?