0

我在用户控制器中有一个名为“联系人”的自定义操作。此操作将由访客帐户访问,该帐户对用户设置的某些内容具有只读访问权限。视图应该只显示用户的某些属性——例如他们的名字,而不是他们更私密的细节。我正在使用 CanCan 和 Devise 进行身份验证和授权。

我在用户模型中将名称、密码等设置为 attr_accessible。所以,我的问题是,什么是阻止客人访问他们所链接的用户的所有属性?我的“联系人”视图只有@user.name - 有没有办法让黑客使用例如@user.private_details 刷新页面,或者这不可能?

如果可能的话,我该如何解决这个问题 - 有没有办法可以将控制器操作更改为仅从数据库中调用某些参数,例如:

@user = User.find(params[:id]), :only => (:first_name, :last_name)

任何建议将不胜感激,谢谢!

4

1 回答 1

0

攻击者无法控制响应使用哪个模板(除非您的控制器可能根据用户输入切换使用哪个模板)

然而,他们可以以不同的格式请求响应,例如,他们可以请求文档的 JSON 表示,一个脚手架的 rails show action 会响应。您当然可以覆盖返回的 json。

最后回答原始问题,select允许您控制从数据库中获取的内容,例如

User.select(:first_name, :last_name).find(params[:id])
于 2013-08-19T18:33:20.453 回答