ASP.NET HTTPS重定向& HSTS标头

时间:2017-06-20 09:38:45

标签: asp.net azure https web-config hsts

我们在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规则?

1 个答案:

答案 0 :(得分:4)

不,你需要两者。

HSTS应仅适用于符合规范的安全请求。将它应用于不安全的请求是没有意义的,因为中间人可能只是删除标题。

如果HTTP发出请求,您必须先将其重定向到HTTPS。然后在响应中返回HSTS标头。

引自规范:https://tools.ietf.org/html/rfc6797#section-7.2

  

HSTS主机不得在HTTP响应中包含STS头字段      通过非安全运输传达。