Cakephp 2表单中的安全性

Van*_*och 4 forms security cakephp

我有一个关于cakephp2表单安全性的问题.假设我们已启用安全组件,并且已经构建了用户身份验证,权限和产品管理系统.

我们需要创建一个Offer Offer功能,允许用户询问特定产品的报价.

用户已登录并单击"询问"并转至/ offer_requests/add/product_id


场景1:

在/Views/OfferRequests/add.ctp中:

<?php 
echo $this->Form->create('OfferRequest');
echo $this->Form->input('user_id', 
                         array('value' => $this->Session->read('Auth.User.id'),
                               'type' => 'hidden' ));
echo $this->Form->input('product_id');
echo $this->Form->input('quantity');
echo $this->Form->end(__('Submit'));
?>
Run Code Online (Sandbox Code Playgroud)

场景2:

在/Views/OfferRequests/add.ctp中:

<?php 
echo $this->Form->create('OfferRequest');
echo $this->Form->input('product_id');
echo $this->Form->input('quantity');
echo $this->Form->end(__('Submit'));
?>
Run Code Online (Sandbox Code Playgroud)

在OfferRequestsController中添加():

<?php
$this->request->data['OfferRequest']['user_id'] = $this->Session->read('Auth.User.id');
?>
Run Code Online (Sandbox Code Playgroud)

我的问题是哪种情况更安全,例如反对以其他用户身份提出虚假请求.对于方案1,安全组件是否允许通过Firebug或其他软件操作输入值?

jer*_*ris 5

是的,安全组件添加了自动防止表单篡改:

来自文档:

通过使用安全组件,您可以自动获得CSRF并形成篡改保护.隐藏的令牌字段将自动插入表单并由安全组件检查.除其他事项外,表格提交将在一段时间不活动后被接受,该时间由csrfExpires时间控制.

如其他答案中所述,您可以fieldsList在保存数据时使用该选项.但是,使用安全组件,您可以将其添加user_id为隐藏字段(方案1),而不必担心其值被篡改.这将防止在控制器中设置它的必要性(方案2).