ASP.NET MVC HTTPS重定向,不暴露身份验证信息

时间:2014-12-08 12:43:24

标签: asp.net asp.net-mvc https

我有一个网站,我必须在任何地方强制使用HTTPS。

我担心在执行HTTP到HTTPS重定向时,如果用户已经登录(通过cookie或令牌),那么该认证信息可能会以明文形式无意中传输。

我如何确保不会发生这种情况?

1 个答案:

答案 0 :(得分:1)

在没有捕获安全信息的情况下安全地进行重定向的一种方法是使用重写引擎 - 假设URL本身没有令牌/安全信息(即:会话等)。

<system.webServer>
    <rewrite>
        <rules>
            <clear />
            <rule name="HTTPS Redirect" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="true" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

如果您在Fiddler中分析此配置的结果,您会注意到即使用户已通过身份验证,初始的非安全请求也没有安全信息。

这是GET请求:

GET http://www.someurl.net/Dashboard HTTP/1.1
User-Agent: Fiddler
Host: www.someurl.net

响应只是标准的301 perm重定向,没有任何安全传输:

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Date: Mon, 08 Dec 2014 13:07:53 GMT
Location: https://www.someurl.net/Dashboard
Server: Microsoft-IIS/8.0
X-Powered-By: ASP.NET
Content-Length: 162
Connection: keep-alive

<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="https://www.someurl.net/Dashboard">here</a></body>