Cakephp 2中的表单安全性

4
我有一个关于CakePHP2表单安全性的问题。 假设我们已启用Security组件并已构建了用户身份验证、权限和产品管理系统。
我们需要创建一个“报价请求”功能,允许用户请求特定产品的报价。
用户已登录,点击“请求”,进入/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中添加add()方法:
<?php
$this->request->data['OfferRequest']['user_id'] = $this->Session->read('Auth.User.id');
?>

我的问题是哪种情况更安全,例如防止其他用户发出虚假请求。对于方案1,安全组件是否允许通过Firebug或其他软件操纵输入值?
1个回答

5

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

来自文档:

通过使用安全组件,您自动获得CSRF和表单篡改保护。隐藏的令牌字段将自动插入表单并由安全组件进行检查。除其他外,表单提交将在一定时间内不被接受,该时间由csrfExpires时间控制。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接