如何在 ASP.NET 会话 Cookie 上设置安全标志,以便它只能通过 HTTPS 传输,而不能通过普通 HTTP 传输?
有两种方式,web.config中的一个 httpCookies元素允许您打开 requireSSL,它只传输包括 SSL 会话在内的所有 cookie,并且还有内部表单身份验证,但是如果您打开 httpcookies 的 SSL,您也必须打开内部表单配置。
web.config
httpCookies
requireSSL
为清晰起见进行编辑: 把这个放进 <system.web>
<system.web>
<httpCookies requireSSL="true" />
在 <system.web>元素中,添加以下元素:
但是,如果在 system.web\authentication块中有一个 <forms>元素,那么这将覆盖 httpCookies中的设置,将其设置回默认的 false。
system.web\authentication
<forms>
false
在这种情况下,还需要将 requireSSL="true"属性添加到 forms 元素中。
requireSSL="true"
所以你最终会得到:
<system.web> <authentication mode="Forms"> <forms requireSSL="true"> <!-- forms content --> </forms> </authentication> </system.web>
有关这些元素的 MSDN 文档,请参见 给你和 给你。
如果您谈论的是企业环境中的签入代码,那么事情很快就会变得一团糟。我们发现最好的方法是让 网络版 Release.config包含以下内容:
<system.web> <compilation xdt:Transform="RemoveAttributes(debug)" /> <authentication> <forms xdt:Transform="Replace" timeout="20" requireSSL="true" /> </authentication> </system.web>
这样,开发人员就不会受到影响(在 Debug 中运行) ,只有获得发布版本的服务器才需要使用 SSL cookie。
Security-此属性告诉浏览器只有在请求通过诸如 HTTPS 之类的安全通道发送时才发送 cookie。这将有助于防止未加密请求传递 Cookie。如果应用程序可以通过 HTTP 和 HTTPS 访问,那么 Cookie 就有可能以明文形式发送。
基于@Mark D 的回答,我将使用 web.config 转换将所有不同的 cookie 设置为 Secure。这包括设置 anonymousIdentification cookieRequireSSL和 httpCookies requireSSL。
anonymousIdentification cookieRequireSSL
httpCookies requireSSL
为了达到这个目的,你需要设置你的 web:
<?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 的新标记) :
ASP.NET Membership Provider
roleManager cookieRequireSSL
forms requireSSL
<?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 最初的问题,但是如果你不把它们都设置成安全的,你可以期望安全扫描工具会注意到,你会看到红色标志出现在报告上。问我怎么知道的。:)