小编典典

在 asp.net 中强制整个站点使用 https 的最佳方法是什么?

all

大约 6 个月前,我推出了一个网站,每个请求都需要通过 https。当时我能找到确保对页面的每个请求都通过 https
的唯一方法是在页面加载事件中检查它。如果请求不是通过 http 我会 response.redirect(“
https://example.com “)

有没有更好的方法——最好是 web.config 中的一些设置?


阅读 64

收藏
2022-06-25

共1个答案

小编典典

请使用HSTS(HTTP
严格传输安全)

来自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 中指定它

2022-06-25