我对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或其他软件操作输入值?
答案 0 :(得分:5)
是的,安全组件添加了自动防止表单篡改:
来自docs:
通过使用安全组件,您可以自动获得CSRF和表单 篡改保护。隐藏的令牌字段将自动成为 插入表单并由安全组件检查。除其他外 事情,表格提交将在一段时间后被接受 不活动,由csrfExpires时间控制。
如其他答案中所述,您可以在保存数据时使用fieldsList
选项。但是,使用安全组件,您可以将user_id
添加为隐藏字段(方案1),而不必担心其值被篡改。这样就无需在控制器中设置它(方案2)。