ASP.Net MVC cookies – 防篡改?
所以我正在阅读我在/ r / netsec上找到的一篇简洁的文章:
https://paragonie.com/blog/2015/05/using-encryption-and-authentication-correctly 真正让我陷入循环的一件事是,人们可以在加密的cookie中翻转一下,实际上对所包含的数据进行了有意义的改变. 确保所有流量都通过SSL很容易(这不是关于安全传输的问题),但这让我真正考虑了消息的完整性以及如何查看原始cookie是否被篡改.通常,我只会在cookie中存储经过身份验证的用户ID,并处理防火墙后面的所有其他内容.如果我可以篡改该cookie以从客户端更改用户ID,该怎么办?上述文章表明这??是可能的,并且提供了使用优选的libsodium来解决该问题的建议.我知道这个库(我自己没有使用它),但是我认为需要ASP内置安全机制以外的东西,这让我进一步深入兔子洞. 特别是关于内置ASP安全性,我是否需要做一些尚未以标准方式处理cookie安全性的特殊方法(让OWIN做其事或使用FormsAuthentication.Encrypt)?如果没有,如何在引擎盖下处理消息完整性? 进一步阅读让我参与了这个关于代码项目的HttpSecureCookie类: 以上表示使用机器密钥进行cookie防篡改,但我不清楚它是如何使其防篡改.这将如何防止恶意用户将原始文章中指示的位翻转到加密的cookie? 解决方法
只需将
forms authentication protection方法设置为加密和验证即可.
这将防止比特翻转攻击,因为一旦翻转一个比特,签名就不会匹配.验证表示邮件已签名. 验证如何工作? 验证算法can be set in 默认情况下,它使用HMACSHA256,它是使用HMAC构造应用的SHA-256哈希. 哈希对cookie进行签名 – 如果cookie值发生变化,则哈希将不再匹配.由于最终用户不知道秘密,他们无法更改cookie值. 例如尝试on here为具有秘密秘密的消息foo生成SHA-256 HMAC. 这应该给你:773ba44693c7553d6ee20f61ea5d2757a9a4f4a44d2841ae4e95b52e4cd62db4 请注意,如果将foo更改为其他内容,则哈希将不同.这就是如何保护cookie免受篡改.该cookie将设置如下. Set-Cookie: id=foo&hash=773ba44693c7553d6ee20f61ea5d2757a9a4f4a44d2841ae4e95b52e4cd62db4 请注意,该值是明文,但散列签名可防止任何篡改.这只是验证. 使用加密和验证选项,foo将首先被加密,签名将阻止任何位翻转.这使得值可以从最终用户私下存储. 如果您在表单身份验证之外实现此功能,请记住在cookie中存储某种类型的到期日期并将其包含在签名中.可以在服务器端检查此日期.表单身份验证默认执行此操作. 否则,用户可以记下有效的cookie值.假设他们在一天内获得管理员访问权限并发出以下cookie: username=admin&hash=71b3ba92493e92ce3c60042988e9de428f44b35a6be61c8da99fa43f950d3056 在撤销管理员访问权限的第二天,所有用户需要做的是使用cookie编辑器将其cookie设置为上述值,并且他们将再次拥有对系统的管理员访问权限. 要解决此问题,您可以发出如下cookie: username=admin&expiry=20150508100000&hash=e38a3a003b30ceb9060165d19bb8d2a2bca6c7c531a37e888448ca417166db3a 这在cookie中有到期日期,在哈希中签名.任何修改到期日的尝试都将导致HMAC不匹配,并且用户将无权访问.这将防止任何篡改cookie到期日期或任何娱乐客户端.
另一种方法是存储完全随机的,加密安全的生成字符串,并将其设置为cookie值.在您的服务器上,使用SHA-2存储它(不需要盐)并查找此值以检索有关用户会话的详细信息.当然这有一些开销.优点是可以通过删除条目来杀死服务器端的会话. 这也可以使用表单身份验证来完成,但是您需要实现自定义提供程序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.net图表控件:隐藏除数据点之外的所有行(轴等)
- asp.net实现在非MVC中使用Razor模板引擎的方法
- 谈基于.net平台开发中的模式窗体
- asp.net-mvc-3 – Orchard CMS DataAnnotations – 客户端验
- asp.net – 无法为Elmah配置邮件
- webservice的两种调用方式
- asp.net – 如何从网络外部的外部站点允许内部MVC Web Api
- 全局导入/使用.NET中的别名
- asp.net-core – 使用IdentityServer4生成访问令牌,无需密码
- asp.net-mvc – 向RouteValueDictionary添加复杂类型的数组
- asp.net-mvc-4 – URL以’/’结尾时的服务器错误
- asp.net-mvc-3 – MVC3 IEnumerable模型找不到正
- 在ASP.NET MVC 4中将jQuery 1.8.3更新为jQuery 1
- asp.net-mvc – 使用WCF IOC Structuremap的SOA架
- asp.net-mvc – 将@ Html.RadioButtonFor设置为默
- asp.net-mvc – EF代码首先采用模块化设计
- asp.net-mvc-2 – 如何从ASP.NET页面运行冗长的任
- asp.net – 使用冗长的服务器进程取消asynch回发
- asp.net-mvc – 如何在aspnet标识中设置用户名不
- asp.net – JMeter测试ASP .NET网页有多好?