如何保护CakePHP中的UPDATE操作?

时间:2015-08-13 17:03:38

标签: php cakephp model

我想在我的多用户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将修改另一个用户的记录。我想保护由两个条件定义的条件和更新记录 - PKuser id(所有者,登录用户)。

模型方法updateAll()接受具有UPDATE ... WHERE条件的数组,但此方法不像save()方法那么容易使用,因为它需要的数据数组不同于save()方法,我必须将$this->request->data修改为适当的结构并执行转义字符串值。

我有一个想法SELECT在执行更新之前有两个条件(PKowner id)的适当记录,但我不喜欢这个,因为还有一个数据库操作。

是否有其他方法或解决方法如何在CakePHP应用程序中保护UPDATE操作?

1 个答案:

答案 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