为什么使用before_action是安全的:authenticate_admin?

时间:2017-07-27 03:02:51

标签: ruby-on-rails

我是网络和Rails的新手,我发现将这样的东西放在控制器的开头是一种常见的用法:

String url = "http://127.0.0.1:8983/solr/collection1; is ok!!!

HttpSolrServer solrServer = new HttpSolrServer(url);

solrServer.ping();

,其中

before_action :authenticate_admin, only: [:only_admin]

考虑到是否有可能以某种方式忽略来自客户端的这种重定向,我觉得真的不安全。 def authenticate_admin unless current_user.admin? flash[:alert] = "You are not admin!" redirect_to '/' end end 如何实施?为什么这种用法可以确保安全?

1 个答案:

答案 0 :(得分:0)

redirect_to将 - 终止您当前的HTTP请求并要求客户端发起对/的新调用,该调用应该是公共页面。您可以在任何地方重定向。

换句话说,它是HTTP重定向。

代码首先检查用户是否是管理员。如果没有,它会“警告”该消息并将客户端重定向到/

如果您询问是否可以通过删除此调用来忽略服务器上的此重定向,则不应忽略重定向,否则您只需检查用户是否为管理员但未采取任何操作。实际上,代码有义务让客户转到/。假设该URL可以安全地用于非管理员,这是安全的。

如果您询问客户端(浏览器)是否能够忽略重定向 - 客户端无法忽略此重定向; rails将终止连接并发出HTTP重定向,浏览器无法忽略该重定向,因为它位于HTTP级别。

考虑重新定义你的问题更准确