繁体   English   中英

IIS 7.5 URL重写-帐户控制器从http重定向到https,其他所有内容从https重定向到http

[英]IIS 7.5 URL Rewrite - Redirect from http to https for account controller but from https to http for everything else

我已经找到了完成这项工作所需的点点滴滴,但还无法将所有内容整合到一个可行的解决方案中。

我正在Intranet站点上工作,并且想要确保*仅使用https在我的帐户控制器上进行登录和注销操作。 我已经正确安装了证书,并且可以使用UrlRewrite规则将到这些控制器操作的流量成功重定向到https:

<rule name="Redirect to HTTPS" stopProcessing="true">
    <match url="^account/logon$|^account/logoff$" />
        <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
        </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:0}" redirectType="Permanent" />
</rule>

但是,现在,我还想将*我网站的所有其余请求(不包括对两个操作的访问量)重定向到http。 我对辩论这种方法的优点不感兴趣,因为我有充分理由认为希望将https重定向回http。

我尝试在Actions中编写一些代码来实现此目的,但是与此同时存在一些重大问题。 我不知道是否是因为我正在使用两个负载平衡的服务器或其他服务器,但是我尝试执行的任何操作都给我一个“重定向过多”的错误消息。

因此,有两个问题:

  1. 使用UrlRewrite规则重定向到https或控制器操作之外更好吗?
  2. 有没有人有可用的代码示例或至少可以帮助我正确地入门的东西?

任何帮助深表感谢!

迟到总比不到好。 这可能对您或其他人有帮助。

<rule name="Redirect to HTTP">
        <match url="secureDir/(.*)" negate="true" />
        <conditions>
          <add input="{HTTPS}" pattern="^ON$" />
        </conditions>
        <action type="Redirect" url="http://{HTTP_HOST}{REQUEST_URI}" />
      </rule>

      <rule name="Redirect to HTTPS" stopProcessing="true">
        <match url="secureDir/(.*)" />
        <conditions>
          <add input="{HTTPS}" pattern="^OFF$" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" />
      </rule>

首先,在非页面资源方面,您将面临一些挑战-如何引用图像和样式表?

至于眼前的问题,我想您想将其强制在Web服务器的上游,例如在负载均衡器上。 我还将通过添加RequireHttps属性来支持帐户控制器。

最后,请记住,即使登录过程是安全的,如果未通过HTTPS传输该cookie,您也很容易遇到类似firesheep的情况。

这里有一些代码,可让您使用属性进行控制。

MVC已经具有[RequireHttps]属性,您可以将其应用于登录/注销页面。 我的代码扩展了这种方法,并为您提供了额外的[ExitHttpsIfNotRequired]属性。 将此属性应用于基本控制器后,当您尝试使用不带[RequireHttps]的HTTPS访问任何操作时,它将把您重定向到HTTP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM