如何使用requireSSL =“true”修复CSRF和[加密会话(SSL)Cookie中缺少安全属性]问题?

时间:2014-10-07 02:41:59

标签: c# asp.net ssl csrf secure-coding

我发现在不安全的服务器(没有SSL)中requireSSL="true"属性存在问题 UAT中的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证书。我们可以使用Request.Cookies[AntiXsrfTokenKey]

  2. 阅读安全cookie吗?
  3. 如果我们执行requireSSL="false",那么CSRF修复工作正常,但所有Cookie都会变得不安全,这意味着所有Cookie都会存在[Missing Secure Attribute in Encrypted Session (SSL) Cookie]问题。

1 个答案:

答案 0 :(得分:0)

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

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

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

相关问题