如何使CakePHP验证更安全?

时间:2013-02-09 17:09:30

标签: validation cakephp cakephp-2.3

最近我完成了使用CakePHP创建简单博客的教程 - 这里是链接:http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.html 创建验证表单非常简单快捷,但我注意到了一个问题。

名为post.ctp的文件包含:

  echo $this->Form->create('Post');
  echo $this->Form->input('title');

它使用此输入为最终用户生成表单:

<input id="PostTitle" type="text" required="required" maxlength="50" name="data[Post][title]">

使用Firefox Firebug的人可以在将表单从name="data[Post][title]"提交到:name="data[Post][author]"之前更改html代码。结果将更新名为“author”的列,而不是“title”,并且还允许使用“title”的空数据更新数据库。

在名为“模型”的文件夹中,Post.php中的验证规则不会阻止:

class Post extends AppModel {

public $validate = array(
    'title' => array(
        'rule' => 'notEmpty'
    ),
    'body' => array(
        'rule' => 'notEmpty'
    )
);

}

如何保护我的应用程序并且不允许某人更新数据库中的其他列?

2 个答案:

答案 0 :(得分:3)

Cake的security component包含form tampering保护。您需要在控制器中添加安全组件:

public $components = array('Security');

答案 1 :(得分:2)

查看Model documentation。至少有两种方法可以解决这个问题。

  1. 调用fieldlist时,您可以将save()作为第三个参数传递。
  2. 您可以在调用whitelist之前设置模型的save()属性。
  3. 我还没有用过这个,但Security Component是另一种选择。