首页 > 解决方案 > Request.UrlReferrer 很容易被绕过并且不可靠地用作警卫?

问题描述

我试图对某些操作进行保护,因此除非请求来自某个主机,否则它无法访问。这是示例代码。

public ActionResult test()
{
    if (Request.UrlReferrer == null || Request.UrlReferrer.Host != "mydomain.com") { return Content("Blocked!"); }
    else { return Content("Authorized!"); }
}

一切似乎都运行良好,直到我访问mydomain.com “在地址栏中输入链接”,打开浏览器控制台并输入

window.location.href = "https://domainholdingthatacion.whatever/ActionRoute/test"; //trying to get unauthorized access

有效!它进入 else 分支。我需要您的输入,因为我不知道我是否使用错误,因为Request.UrlReferrer不适合用于此目的,或者它本质上是易受攻击的。

标签: c#asp.netasp.net-mvcreferrerhttp-referer

解决方案


UrlReferrer 用于授权是不安全的。任何浏览器或客户端都可以决定将引荐来源网址设置为他们想要的任何内容。此外,出于隐私原因,一些浏览器会阻止拒绝尊重此标头(尽管大多数情况下仅在不同域之间才是正确的)。

有专门为此的 Authorize 注释。


推荐阅读