【问题标题】:Pass data safely from view to controller in rails将数据从视图安全地传递到 Rails 中的控制器
【发布时间】:2015-03-12 01:35:41
【问题描述】:

我想将数据从视图(链接)传递到控制器,以便它可以查找相关信息。在这种情况下为公司提供服务。

我看到人们添加到这样的参数的示例:

<div>
    <%= link_to 'Services', :controller => 'company', :action => 'services', :company_id => @company.id %>
</div>

...但这会导致像这样的透明(不安全)URL:

http://localhost:5000/company/services?company_id=17

有没有办法在不向 Session 中填充数据的情况下解决这个问题?应用内需要身份验证的链接的最佳做法是什么?

【问题讨论】:

  • 网址有什么不安全的地方?
  • 您需要授权,而不仅仅是身份验证。您也可以使用 GUID 而不是直接 ID,但如果您的应用具有适当的身份验证/身份验证,那么公开这样的数据并没有错。

标签: ruby-on-rails security url hyperlink link-to


【解决方案1】:

在 View 中传递这样的数据并没有那么大的危害。

如果你坚持有,那就检查一下 prettyurls:

http://railscasts.com/episodes/314-pretty-urls-with-friendlyid

在此之前,我们必须对控制器和模型文件进行有效检查。

 1. Valid Checks and redirection in Controller is helpful.
 2. Depending on need adding validations in model can be a good support.

【讨论】:

  • Pretty URLs 并没有什么不同,但是,您仍然可以唯一地标识一个实体。问题是我的用户是否有权查看、修改等他们试图访问的内容。
【解决方案2】:
<%= link_to "Sign in", new_session_path(:id => Base64.encode64("1")) %>

在你的控制器中

def new
  id=Base64.decode64(params[:id].to_s)
end

这是创建数据链接的另一种形式

使用命令 un console rake routes 检查您的路线

更多信息请阅读本文档

http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to

【讨论】:

  • 如果您不需要在 url 中使用 Base64 来获取 METHOD GET 请求中可见的值,则参数将永远进入 url,并且一个链接可以与 GET METHOD 一起使用
  • 毫无疑问 Base64 会起作用,但在真正的 Rails 应用程序中,我们将如何/在哪里包装这个编码和解码函数?
  • 用于在所有项目中编码数据工作,例如在哪里编码?在你发送的数据中,在哪里解码?在您获取控制器的 post params 操作时,我在所有指向我的服务器的链接中使用更安全的数据
  • 但是在哪里放置这个编码/解码逻辑在实时轨道应用程序中?
猜你喜欢
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多