我发现在不安全的服务器(没有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个查询 -
与在UAT中一样,SSL在负载均衡器级别进行管理,IIS框中没有安装SSL证书。我们可以使用Request.Cookies[AntiXsrfTokenKey]
如果我们执行requireSSL="false"
,那么CSRF修复工作正常,但所有Cookie都会变得不安全,这意味着所有Cookie都会存在[Missing Secure Attribute in Encrypted Session (SSL) Cookie]
问题。
答案 0 :(得分:0)
这可能不是您问题的答案,但这是我们可以尝试的,
要从CSRF令牌获得最大收益,您可以使用Request.Headers传递它。 使用Header传输令牌是我认为安全的方法。
Default.aspx的OnInit很好但是如果你之间有任何httpmodule你可以尝试AcquireRequestState()方法并获取HttpContext.Current.Request.Headers [“CSRFToken”]并在会话中保留该令牌的一个副本验证(可能有其他一些逻辑需要验证)