如何修复带有requireSSL=“”的CSRF和[加密会话(SSL)Cookie中缺少安全属性]问题;真”;

本文关键字:SSL Cookie 安全 问题 属性 会话 requireSSL 何修复 加密 CSRF | 更新日期: 2023-09-27 18:25:42

我在中的不安全服务器(没有SSL)中发现requireSSL="true"属性有问题UAT-<httpCookies httpOnlyCookies="true" requireSSL="true" lockItem="true" />中的web.config代码行。

对于CSRF(跨站点请求伪造)修复,我们使用:

var requestCookie = Request.Cookies[AntiXsrfTokenKey];

我们无法从不安全的服务器读取安全cookie。因此,对于不安全的服务器,web.config中的requireSL属性应为false。

如果我们使requireSSL="false" CSRF修复工作正常,但所有cookie都变得不安全,从而生成其他问题[Missing Secure Attribute in Encrypted Session (SSL) Cookie]

我们还附上了CSRF修复代码,其中函数PreventCSRF()Default.aspx.cs页面中的OnInit(EventArgs e)事件调用。

在本地,我们没有SSL,requireSSL="false"可以很好地使用CSRF修复,但不适用于[Missing Secure Attribute in Encrypted Session (SSL) Cookie]。因此,CSRF和[Missing Secure Attribute in Encrypted Session (SSL) Cookie]问题的修复取决于彼此。

有2个查询-

  1. 与UAT一样,SSL是在负载平衡器级别管理的,IIS盒子中没有安装SSL证书。我们可以使用Request.Cookies[AntiXsrfTokenKey]读取安全cookie吗?

  2. 如果我们执行requireSSL="false",则CSRF修复工作正常,但所有cookie都变得不安全,这意味着[Missing Secure Attribute in Encrypted Session (SSL) Cookie]问题对所有cookie都有效。

如何修复带有requireSSL=“”的CSRF和[加密会话(SSL)Cookie中缺少安全属性]问题;真”;

这可能不是你问题的答案,但以下是我们可以尝试的,

为了从CSRF令牌中获得最大收益,您可以使用Request.Headers传递它。我想用Header传输令牌是安全的方法。

Default.aspx的OnInit很好,但如果您在两者之间有任何httpmodule,您可以尝试AcquireRequestState()方法并获取HttpContext.Current.Request.Headers["CSRFToken"],并在会话中保留该令牌的一个副本以进行验证(可能是您有其他逻辑要验证)