【问题标题】:Ways to avoid CakePHP $this->data security hole?避免 CakePHP $this->data 安全漏洞的方法?
【发布时间】:2011-10-16 00:05:47
【问题描述】:

我只是在做基本的 CakePHP 工作时才意识到,有一个非常糟糕的安全问题,很多人不一定会注意到。我将仅使用我认为许多用户在使用 CakePHP 驱动的应用程序时使用的这个基本功能。

function edit() {
  if(!empty($this->data)) {
    if($this->User->save($this->data)) {
    }
  }
}

假设用户有权使用此操作。此操作可能是编辑用户信息,其中可能有城市和号码,当然还有用户名。让我们假设我们想要一个允许我们只编辑城市和号码而不是用户名的表单。那么,如果有人只是将用户名字段插入到带有 firebug 的表单中呢?然后提交表格。现在编辑将获取所有帖子信息,包括用户名字段及其值并立即编辑它们。因此,即使没有字段,您也可以在这种情况下更改您的用户名。

如果有人使用 saveAll(),这可以更进一步,它允许您一次验证和保存多个模型。如果您可以从表单字段中猜出要使用的模型,那么您也可以轻松地转到其他模型和表格并更改这些信息。

既然您了解了我的担忧,我的问题是避免这种情况的最好或至少接近最好的方法是什么?

我知道我可以从 $this->data 中获取我想要的数据到其他变量,然后将其传递给 save 或 saveAll,但是因为有很多表单和 ajax 请求,这将是相当多的工作.但这是唯一的方法还是有更好的方法?

我应该做出或是否有可以阻止这种情况的行为?比如检查某些控制器中的某些操作可以从 post 中获取哪些变量?

【问题讨论】:

    标签: database security model cakephp-1.3


    【解决方案1】:

    经过几天的研究,我发现这并不是真正的“安全漏洞”,而是初学者的错误。

    有两种方法可以避免这种类型的表单篡改:安全组件 (http://book.cakephp.org/view/1296/Security-Component),它通过为表单字段创建一次性哈希来自动获取 CSRF 和表单篡改保护。

    另一种方法是将第三个参数传递给 save() 函数。 save实际上得到3个参数:data、validate、fieldlist。 fieldlist 参数的作用类似于允许保存的字段的白名单。

    我首先将这个问题作为一个 bug 报告给 cakephp,然后它不是,但是这个 euromark 人回复我说他已经很好地记录了实际问题以及如何进行安全保存,我真的认为它非常好读。所以如果你有同样的问题,请看这个页面:http://www.dereuromark.de/2010/09/21/saving-model-data-and-security/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 2011-12-17
      相关资源
      最近更新 更多