1. ホーム
  2. c#

[解決済み】サイト全体を強制的にhttpsにするasp.netの最良の方法?

2022-04-19 22:30:14

質問

6ヶ月ほど前に、すべてのリクエストがhttpsである必要があるサイトを展開しました。 当時、ページへのすべてのリクエストが https であることを確認する唯一の方法は、ページロードイベントでそれを確認することでした。 もし、リクエストが http でなかった場合、response.redirect(".) を実行します。 https://example.com となります。)

Web.configに何らかの設定をするのが理想的なのですが、何か良い方法はありますか?

解決方法は?

を使用してください。 HSTS (HTTP Strict Transport Security)

から http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="HTTP to HTTPS redirect" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
                        redirectType="Permanent" />
                </rule>
            </rules>
            <outboundRules>
                <rule name="Add Strict-Transport-Security when 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" />
                </rule>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

オリジナル回答 (2015年12月4日に上記と差し替えました)

基本的に

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   if (HttpContext.Current.Request.IsSecureConnection.Equals(false) && HttpContext.Current.Request.IsLocal.Equals(false))
   {
    Response.Redirect("https://" + Request.ServerVariables["HTTP_HOST"]
+   HttpContext.Current.Request.RawUrl);
   }
}

これは、global.asax.cs (または global.asax.vb) に含まれます。

web.configで指定する方法は知りません。