7

到目前为止,我的 https 部署通常涉及使用 https 对整个站点进行简单的锁定,并在 Web 服务器上提供 http-to-https 重定向。

我现在计划创建一个包含 http 和 https 页面的 ASP.NET MVC 站点(在云上)。因此,该站点将有 2 个概念(非物理)区域,同时提供安全和非安全请求。

配置方面,我已经为 80 和 443 设置了输入端口,并且站点接受了这两个请求。

对于属于安全区域的操作的任何调用,有什么方法可以将协议转换为 https 吗?例如,动作过滤器可以做的事情。

非常感谢。

编辑: 请注意,这样做的整个想法是避免在表单操作属性上使用绝对 url,因为可移植性问题以及因为用户不会在浏览器上看到 https:// 保证视觉提示。

4

2 回答 2

7

您可能想查看 Microsoft提供的 MVC 期货程序集,可在此处下载。

这有一个 FilterAttribute, RequireSslFilterAttribute 允许您轻松标记控制器中需要 SSL 的 Action 方法 - 例如

[RequireSsl(Redirect=true)]
public ActionResult LogOn()
{
  return View();
}

可选的重定向参数将导致请求被重定向到相同的 URL,但如果需要,通过 https 而不是 http。

警告:正如 Daniel 指出的那样,当您点击此操作时,如果数据已发布到页面的非安全版本可能已经为时已晚 - 它已经可能受到损害,因此您在使用此操作时仍然需要小心并确保所有敏感数据都通过 https 发送。(我刚刚注意到你对丹尼尔的评论,你显然明白这一点,我会把警告留给其他偶然发现这一点的人!)

编辑:正如 Luke 指出的,在 MVC2 中,这个属性现在是核心框架的一部分,并重命名为 [RequireHttps]

于 2009-04-17T20:03:17.823 回答
0

对于属于安全区域的操作的任何调用,有什么方法可以将协议转换为 https 吗?

简短的回答是否定的,一旦请求是通过 http 发出的,它就已经被潜在地破坏了。您可以要求某些调用通过 HTTPS 进行(不知道该怎么做,因为我有一段时间没有使用 ASP.Net),如果没有,则发送错误。关键是决定您希望应用程序何时进行跳转,即在登录期间并选择 HTTPS 作为这些表单的操作。这就是你所说的“动作过滤器”吗?

于 2009-04-17T19:15:16.173 回答