确保使用ssl调用操作?

时间:2013-01-10 03:46:27

标签: c# asp.net-mvc

使用c#mvc,我如何确保通过ssl调用特定的Action?

例如在付款页面上,我的服务器允许使用https / http,但我想强制用户使用https来访问它?

我在想类似动作过滤器,如果它们不使用它们会将它们重定向到https?

这是一种正确的方法吗?

2 个答案:

答案 0 :(得分:3)

两秒钟后,当然是框架的一部分。

RequireHttpsAttribute

答案 1 :(得分:3)

在您的情况下[RequireHttp]属性可能会在您清除登录cookie时发挥作用 - 或者您将通过网络以明文形式发送它。可能需要做更多工作而不是值得进一步避免进一步的成本HTTPS calls.所有关于回收问题的问题和阅读问题的其他用户可能认为登录后下载到HTTP是可以的,这通常是错误的要做。

[RequireHttps]属性可以用于控制器类型或操作方法,以表示“这只能通过SSL访问。”非SSL请求控制器或操作将被重定向到SSL版本(如果是HTTP GET)或被拒绝(如果是HTTP POST)。您可以覆盖RequireHttpsAttribute并根据需要更改此行为。内置的[RequireHttp]属性没有相反的功能,但如果您愿意,可以轻松制作自己的属性。

Html.ActionLink()也有重载,它采用协议参数;您可以明确指定“http”或“https”作为协议。这是一个这样的重载MSDN documentation。如果您没有指定协议或者如果您调用没有协议参数的重载,则假定您希望链接具有与当前请求相同的协议。

我们在MVC中没有[RequireHttp]属性的原因是它没有太大的好处。它没有[RequireHttps]那么有趣,它鼓励用户做错事。例如,许多网站通过SSL登录并在您登录后重定向回HTTP, 这绝对是错误的做法 。您的登录cookie与您的用户名+密码一样秘密,现在您通过网络以明文形式发送它。此外,在运行MVC管道之前,您已经花时间执行握手并保护通道(这是使HTTPS比HTTP慢的大部分),因此[RequireHttp]将不会发出当前请求或未来要求更快。