c# - 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不适合用于此目的,或者它本质上是易受攻击的。
解决方案
UrlReferrer 用于授权是不安全的。任何浏览器或客户端都可以决定将引荐来源网址设置为他们想要的任何内容。此外,出于隐私原因,一些浏览器会阻止拒绝尊重此标头(尽管大多数情况下仅在不同域之间才是正确的)。
有专门为此的 Authorize 注释。
推荐阅读
- python - NumPy 快速傅里叶变换 (FFT) 不适用于 Audacity 中生成的正弦波
- bluetooth - 蓝牙 BLE 标准中是否有身份验证?(逆向工程麻烦)
- javascript - Sapui5 CustomTreeItem 如何将项目添加到树结构
- linux - 有没有办法检查项目中相关文件(如 .java、.story 等)中的贡献行并忽略其他类型的文件?
- python-3.x - Python 3 LDAP3 - 使用来自不同域的用户连接到 AD
- java - 对单个类中的 2 个构造函数使用相同的 JavaDoc
- amazon-web-services - AWS CLI:如何为描述实例实现某种输出格式?
- node.js - 阿特拉斯 MongoDB 连接
- excel - 如何在用户表单标签中使用单元格的值?
- python - 为什么python代码没有打开文件夹中的所有文本文件?