我想在我的多用户CakePHP应用程序中避免UPDATE安全问题。我将在这个简单的例子中说明它。有一个简单的编辑方法,如:
public function edit($id)
{
if ($this->request->is('post')) {
$updated = $this->Template->save($this->request->data);
// Do some logic here...
}
$this->request->data = $this->Template->find('first', array('conditions' => array('Template.id' => $id)));
}
问题:当有人修改POST数据并更改ID(记录的PK
)时,CakePHP将修改另一个用户的记录。我想保护由两个条件定义的条件和更新记录 - PK
和user id
(所有者,登录用户)。
模型方法updateAll()
接受具有UPDATE ... WHERE
条件的数组,但此方法不像save()
方法那么容易使用,因为它需要的数据数组不同于save()
方法,我必须将$this->request->data
修改为适当的结构并执行转义字符串值。
我有一个想法SELECT
在执行更新之前有两个条件(PK
和owner id
)的适当记录,但我不喜欢这个,因为还有一个数据库操作。
是否有其他方法或解决方法如何在CakePHP应用程序中保护UPDATE
操作?
答案 0 :(得分:2)
只需加载安全组件,如下所示:
CakePHP 3
use App\Controller\AppController;
use Cake\Event\Event;
class TemplatesController extends AppController
{
public function initialize()
{
parent::initialize();
$this->loadComponent('Security');
}
}
在此处阅读更多内容:CakePHP Security - form tampering prevention
CakePHP 2
<?php
class TemplateController extends AppController {
public $components = array('Security');
}
在此处阅读更多CakePHP Security