2013-02-09 59 views
1

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

命名post.ctp

文件包含:

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

而且它产生的形式最终用户与该输入:谁在使用Firefox的萤火虫可以更改HTML代码提交表单之前

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

有人从:name="data[Post][title]"到:name="data[Post][author]"。这样做的结果将更新名为“作者”的列,而不是“标题”,并允许使用“title”的空数据更新数据库。

在名为post.php中“模式”的有效性规则的文件夹不防止:

class Post extends AppModel { 

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

} 

如何保护我的应用程序,而不是让别人在更新数据库中其他列?

回答

3

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

public $components = array('Security'); 
+0

谢谢。它工作完美。我只是将组件中的行更新为'public $ components = array('Session','Security');'而没有更多配置。它在开始时起作用。当我试图做同样的事情时,我得到了“请求已被黑洞”的消息。完善。他们应该在第一个教程中加入,因为这很重要。 – Lucas 2013-02-10 09:16:17

2

看看Model documentation。至少有两种方式来处理这个问题。

  1. 您可以通过fieldlist作为第三个参数调用save()时。
  2. 在致电save()之前,您可以设置型号的whitelist属性。

我还没有使用过,但Security Component是另一种选择。

+0

绝对使用安全组件。阅读链接手册页面以获取更多信息。 – ADmad 2013-02-09 20:02:27