2017-06-20 68 views
0

我們有一個在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規則?

回答

3

不,你需要兩個。

HSTS只應用於根據規範保護請求。將它應用於不安全的請求是沒有意義的,因爲中間人可能會剝去標題。

如果請求帶有HTTP,您必須先將它們重定向到HTTPS。然後在響應中返回HSTS標頭。從規範

引用:https://tools.ietf.org/html/rfc6797#section-7.2

一種HSTS主機不能包括在HTTP響應中 上傳送非安全傳輸的STS頭字段。