Cakephp 2表单中的安全性

时间:2012-08-21 11:07:37

标签: 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'));
?>

情景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'));
?>

在OfferRequestsController中添加():

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

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

1 个答案:

答案 0 :(得分:5)

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

来自docs

  

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

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