4

Cakephp2 フォームのセキュリティについて質問があります。セキュリティ コンポーネントが有効になっていて、ユーザー認証、アクセス許可、および製品管理システムが既に構築されていると仮定しましょう。

ユーザーが特定の製品のオファーを要求できるオファー要求機能を作成する必要があります。

ユーザーがログインし、[質問] をクリックして、/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 またはその他のソフトウェアを介して入力値を操作できますか?

4

1 に答える 1

5

はい、セキュリティ コンポーネントは、フォームの改ざんの自動防止を追加します。

ドキュメントから:

セキュリティ コンポーネントを使用すると、CSRF とフォーム改ざん保護が自動的に得られます。非表示のトークン フィールドは自動的にフォームに挿入され、セキュリティ コンポーネントによってチェックされます。とりわけ、csrfExpires 時間によって制御される非アクティブな一定期間が経過すると、フォームの送信は受け入れられません。

他の回答で述べたように、fieldsList代わりにデータを保存するときにオプションを使用できます。ただし、セキュリティ コンポーネントを使用すると、 を非表示フィールドとして追加できuser_id(シナリオ 1)、その値が改ざんされる心配はありません。これにより、コントローラーで設定する必要がなくなります (シナリオ 2)。

于 2012-08-21T14:18:02.453 に答える