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头字段。