我们在Azure中托管了一个ASP.NET站点。
之前我们实施了以下重写规则来强制使用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>
我们现在通过以下规则(来自this guide)介绍HSTS:
<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规则?
答案 0 :(得分:4)
不,你需要两者。
HSTS应仅适用于符合规范的安全请求。将它应用于不安全的请求是没有意义的,因为中间人可能只是删除标题。
如果HTTP发出请求,您必须先将其重定向到HTTPS。然后在响应中返回HSTS标头。
引自规范:https://tools.ietf.org/html/rfc6797#section-7.2
HSTS主机不得在HTTP响应中包含STS头字段 通过非安全运输传达。