Rails + SSL:每个控制器还是应用程序范围?

And*_*rew 13 ssl https router ruby-on-rails ruby-on-rails-3

我可以使用任何使用过Rails和SSL的开发人员的智慧.我有一个相当简单的应用程序,我正在实施付款处理.显然,付款处理需要SSL,所以我现在正在设置它.
我今天开始研究这个问题时的目的是找到在特定控制器操作上强制执行SSL的最简单/最干净的方法 - 即与付款有关的任何事情.我认为没有理由在SSL上运行我的其余网站.

我找到了ssl_requirement gem,它似乎很轻松地设置了SSL per-controller-action,所以这很好.我还发现这个问题似乎表明用gem处理SSL现在已经不合时宜了.
我还发现了几个答案/评论等,表明网站应该使用像Rack-SSL这样的Rack中间件来强制整个网站进入SSL模式.

所以现在我有点困惑,不知道该怎么做.任何有使用Rails 3和SSL经验的人都可以帮助我理解:

  1. 我是应该强制整个站点使用SSL,还是仅按某些操作强制执行.
  2. 什么陷阱看出来的Rails中使用SSL(我从来没有这样做).
  3. 如果per-controller是要走的路,那么使用ssl-requirementgem是否合理,或者我是否应该使用新的路由和链接帮助选项...

我非常感谢你的见解,这对我来说已成为一个瘫痪的决定.谢谢!

bio*_*net 6

我发现自己在过去的这个决定中"瘫痪了",这就是我每次都想到的.

首先,请记住,如果您不断切换到SSL,或者如果您使用SSL和其他内容(图像,css)提供某些内容(页面),某些浏览器将抛出弹出警告.显然这对用户来说不是一个好的体验.

  1. 在任何地方要求SSL的唯一可能的缺点是性能.但除非你期望每天有1000多名用户做很多*不需要SSL的事情,否则这个数字可以忽略不计.

  2. SSL在Apache/Nginx /任何级别处理.因此,如果您决定将整个应用程序置于SSL之后,那么在Web服务器级别处理它是最有意义的(将http:/yoursite.com重定向到https://yoursite.com.

如果出于性能原因,您决定将所有内容置于SSL之后,那么在Web服务器级别处理SSL重定向仍然有意义.允许您的用户通过您的Web服务器,然后通过半个Rails堆栈发送给他,只是为了让他重新启动以重新开始,这非常浪费.

当然,为了简单和知识领域,有一些东西可以说,这将建议在Rails应用程序或中间件中处理重定向,因为它"知道"什么是安全和不安全的.

但那些是你必须权衡自己的东西.这取决于原始性能或开发/维护的简单性是否更重要.

我通常最终得到一个http://mysite.com的虚拟主机,它将所有内容(有时只有某些uris)重定向到https://mysite.com/ $ 1.希望这很有帮助.