如何在ASP.NET会话Cookie上设置安全标志?

时间:2009-09-18 06:29:10

标签: asp.net-session ssl-security

如何在ASP.NET会话Cookie上设置安全标志,以便它只能通过HTTPS传输而不会通过普通HTTP传输?

5 个答案:

答案 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>

有关这些元素的MSDN文档,请参阅herehere

答案 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 cookieRequireSSLhttpCookies 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 cookieRequireSSLforms 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。