1

最近我完成了关于使用 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 的人可以在提交表单之前将 html 代码从:name="data[Post][title]"更改为:name="data[Post][author]"。这样做的结果将更新名为“作者”的列,而不是“标题”,并且还允许使用“标题”的空数据更新数据库。

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

class Post extends AppModel {

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

}

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

4

2 回答 2

3

Cake 的安全组件包括表单篡改保护。您需要在控制器中添加安全组件:

public $components = array('Security');
于 2013-02-09T20:41:41.607 回答
2

查看模型文档。至少有两种方法可以处理这个问题。

  1. 调用时可以fieldlist作为第三个参数传递save()
  2. whitelist您可以在调用之前设置模型的属性save()

我还没有使用它,但安全组件是另一种选择。

于 2013-02-09T19:22:31.447 回答