2

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

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

var requestCookie = Request.Cookies[AntiXsrfTokenKey];

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

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

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

在本地,我们没有 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 证书。我们可以使用 读取安全 cookieRequest.Cookies[AntiXsrfTokenKey]吗?

  2. 如果我们这样做了,requireSSL="false"那么 CSRF 修复工作正常,但所有 cookie 变得不安全意味着所有 cookie[Missing Secure Attribute in Encrypted Session (SSL) Cookie]的问题仍然存在。

4

1 回答 1

0

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

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

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

于 2015-12-04T09:20:26.727 回答