4

我对 cakephp2 表单的安全性有疑问。假设我们启用了安全组件,并且已经构建了用户身份验证、权限和产品管理系统。

我们需要创建一个 Offer Request 功能,它允许用户请求特定产品的报价。

用户登录并单击“询问”并转到 /offer_requests/add/product_id


场景一:

在 /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'));
?>

场景二:

在 /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 或其他软件来操作输入值?

4

1 回答 1

5

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

文档

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

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

于 2012-08-21T14:18:02.453 回答