3

许多评论员(例如ZDNet)认为 GitHub 案例的弱点在于,Homakov 发现的模型易受攻击,因为它的属性启用了质量分配。

但是,我认为问题不在于这个,而是未能before_filter在控制器中使用(或类似的)来确保他更新的表中的任何给定行只能由管理员或具有 ID 的用户更新列在该行中。如果控制器中有这样的过滤器,那么即使模型的属性是可批量分配的,表格也会受到保护。

我对么?

4

2 回答 2

3

据我了解,此问题与 before_filters 检查管理员无关。存在一个属性,在您引用 public_keys 模型上的 user_id 的示例中,该属性不应该暴露于批量分配。

before_filter可以作为安全的另一个“层”,也.slice可以用来确保您只获得您应该获得的属性也可以工作。

最后一点:我认为 admin != god,意思是,我发现有权执行 Homakov 利用此问题执行的操作的 Github 管理员没有用。

于 2012-06-09T20:46:03.103 回答
3

是的,我认为你是对的。

在这种情况下,您还可以使用授权 gem,例如:cancan声明式授权heimdallr ...

问题不在于您可以使用。问题是如何帮助不要忘记在某些情况下使用它。例如 cancan 有以下方法:check_authorization它有助于检查所有操作的授权。

关于这一点,霍米亚科夫说。添加受保护的属性将是最简单的方法。也许只是因为限制授权的解决方案不同而发现了漏洞。在某些情况下,添加受保护的属性会导致您的 api 失去灵活性。

于 2012-06-09T20:30:17.993 回答