如何在ASP.NET会话Cookie上设置安全标志,以便它只能通过HTTPS传输而不会通过普通HTTP传输?
答案 0 :(得分:161)
在<system.web>
元素中,添加以下元素:
<httpCookies requireSSL="true" />
但是,如果<forms>
块中有system.web\authentication
元素,则会覆盖httpCookies
中的设置,并将其设置回默认false
。< / p>
在这种情况下,您还需要将requireSSL="true"
属性添加到forms元素中。
所以你最终会得到:
<system.web>
<authentication mode="Forms">
<forms requireSSL="true">
<!-- forms content -->
</forms>
</authentication>
</system.web>
答案 1 :(得分:105)
有两种方法,httpCookies
中的一个web.config
元素允许您打开requireSSL
,它仅传输所有Cookie,包括仅在SSL中的会话以及表单内部身份验证,但如果您在httpcookies上打开SSL,你也必须在表单配置中打开它。
为清晰起见编辑
把它放在<system.web>
<httpCookies requireSSL="true" />
答案 2 :(得分:18)
如果您在企业环境中讨论签入代码,那么事情会很快变得混乱。我们发现最好的方法是让 web.Release.config 包含以下内容:
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<authentication>
<forms xdt:Transform="Replace" timeout="20" requireSSL="true" />
</authentication>
</system.web>
这样,开发人员不会受到影响(在Debug中运行),只有获得Release版本的服务器才需要将cookie作为SSL。
答案 3 :(得分:2)
基于@Mark D的答案,我将使用web.config转换将所有各种cookie设置为Secure。这包括设置anonymousIdentification cookieRequireSSL
和httpCookies requireSSL
。
为此,您需要将web.Release.config设置为:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
<httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
<anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" />
</system.web>
</configuration>
如果您要对ASP.NET Membership Provider
使用角色和表单身份验证(我知道,这很古老),那么您也想将roleManager cookieRequireSSL
和forms requireSSL
属性设置为安全。如果是这样,您的web.release.config可能看起来像这样(上面包括了会员API的新标签):
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
<httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
<anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" />
<roleManager xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" />
<authentication>
<forms xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
</authentication>
</system.web>
</configuration>
web.config的背景在这里转换:http://go.microsoft.com/fwlink/?LinkId=125889
显然,这超出了OP的原始问题,但是,如果未将所有设置都设置为安全的,则可以预期会有安全扫描工具注意到,并且报告中会出现红色标记。问我我怎么知道。 :)
答案 4 :(得分:0)
安全-此属性告诉浏览器仅在通过安全通道(例如HTTPS)发送请求时才发送cookie。这将有助于防止Cookie传递到未加密的请求中。如果可以同时通过HTTP和HTTPS访问该应用程序,则有可能以明文形式发送cookie。