Request.UrlReferrer 很容易被绕过并且用作守卫不可靠?
Request.UrlReferrer is easily bypassed and not reliable to use as guard?
我正在尝试为某些操作设置防护,因此除非请求来自某个主机,否则无法访问它。这是示例代码。
public ActionResult test()
{
if (Request.UrlReferrer == null || Request.UrlReferrer.Host != "mydomain.com") { return Content("Blocked!"); }
else { return Content("Authorized!"); }
}
一切似乎都运行良好,直到我转到 mydomain.com "typed the link in the addressbar" ,打开浏览器控制台并输入
window.location.href = "https://domainholdingthatacion.whatever/ActionRoute/test"; //trying to get unauthorized access
成功了!它进入else分支。我需要你的意见,因为我不知道我是否使用错误,因为 Request.UrlReferrer 不应该用于此目的,或者它本身就很脆弱。
UrlReferrer 用于授权不安全。任何浏览器或客户端都可以决定将引用 url 设置为他们想要的任何值。此外,出于隐私原因,某些浏览器会阻止拒绝遵守此 header(尽管这主要只在不同域之间适用)。
有专门为此的授权注释。
我正在尝试为某些操作设置防护,因此除非请求来自某个主机,否则无法访问它。这是示例代码。
public ActionResult test()
{
if (Request.UrlReferrer == null || Request.UrlReferrer.Host != "mydomain.com") { return Content("Blocked!"); }
else { return Content("Authorized!"); }
}
一切似乎都运行良好,直到我转到 mydomain.com "typed the link in the addressbar" ,打开浏览器控制台并输入
window.location.href = "https://domainholdingthatacion.whatever/ActionRoute/test"; //trying to get unauthorized access
成功了!它进入else分支。我需要你的意见,因为我不知道我是否使用错误,因为 Request.UrlReferrer 不应该用于此目的,或者它本身就很脆弱。
UrlReferrer 用于授权不安全。任何浏览器或客户端都可以决定将引用 url 设置为他们想要的任何值。此外,出于隐私原因,某些浏览器会阻止拒绝遵守此 header(尽管这主要只在不同域之间适用)。
有专门为此的授权注释。