ASP.NET HTTPS重定向和HSTS标头
问题描述:
我们有一个在Azure中托管的ASP.NET网站。ASP.NET HTTPS重定向和HSTS标头
以前,我们采取了以下重写规则,迫使HTTPS:通过以下规则
<rules>
<rule name="Redirect to https">
<match url="(.*)"/>
<conditions>
<add input="{HTTPS}" pattern="Off"/>
<add input="{REQUEST_METHOD}" pattern="^get$|^head$|^post$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
</rule>
</rules>
我们现在引进HSTS(从this guide):
<outboundRules>
<rule name="Add Strict-Transport-Security only when using HTTPS" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000; includeSubdomains; preload" />
</rule>
</outboundRules>
我们是否需要这两个规则还是可以的我们删除了HTTPS规则,并且只有HSTS规则?
答
不,你需要两个。
HSTS只应用于根据规范保护请求。将它应用于不安全的请求是没有意义的,因为中间人可能会剥去标题。
如果请求带有HTTP,您必须先将它们重定向到HTTPS。然后在响应中返回HSTS标头。从规范
引用:https://tools.ietf.org/html/rfc6797#section-7.2
一种HSTS主机不能包括在HTTP响应中 上传送非安全传输的STS头字段。