【发布时间】: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