rails3,params [:id]加密

时间:2011-07-08 08:40:03

标签: ruby-on-rails-3 url encryption

我试图阻止url黑客攻击,我将id传递给表单需要的url,但它工作正常但是如果用户在url上更改了该值,它会将值发送到错误的表。

  

<%= link_to' +新活动',   {:controller =>' events',:action =>   ' new',:company_id => company.id}%>

在php世界中,我曾经用来加密那个id ......我怎么能在rails3上做这个呢?还是有更好的方法?

不用说我对rails很新,我知道一点点php 任何帮助或建议将不胜感激。

2 个答案:

答案 0 :(得分:5)

虽然这是一个较老的问题,但这是一个非常有价值的问题。在URL中隐藏ID是绝对值得的,其中包括防止信息泄露。

例如,应用程序具有强大的安全模型,允许用户仅查看他们拥有权限的资源。但是,为什么用户应该能够查看URL中ID的值,并使用它来推断出有多少资源,或者正如原始提问者建议的那样,开始尝试使用强制浏览。

在rails中解决这个问题的解决方案非常简单。我发现效果最好的是覆盖模型中的to_param,通常是通过lib目录中的模块和应用程序控制器中解密ID的before_filter。

对于演练,请看一下:http://www.youtube.com/watch?v=UW_s9ejrCsI

答案 1 :(得分:2)

不要试图加密或隐藏您的company.id值,而是要问自己,您想要阻止用户做什么。

如果您只是想阻止用户创建与不存在的公司相关联的事件(例如通过将id设置为非常高的值),那么就简单

validates_presence_of :company

在事件模型上没问题。

如果您只希望用户能够创建与他们合作的公司相关联的事件,或者以某种方式获得访问权限,那么您应该创建自定义验证来验证。

˚F