いくつかの MVC アプリケーションで、トークン キーを使用して CSRF を防止しているのを見てきました。これが使用される典型的な例は、投稿の削除メソッドです。
また、GET メソッドと POST メソッドの両方を使用する実装を見てきました。
トークンを使用した GET リクエスト リンクの例:
https://domain.com/posts/G7j/delete/EOwFwC4TIIydMVUHMXZZdkbUR0cluRSkFzecQy3m5pMTYVXRkcFIBWUZYLNUNSNgQKdnpTWu
トークンを使用した POST リクエストの例:
<form action="/posts/G7j/delete" method="post">
<input type="hidden" name="token" value="EOwFwC4TIIydMVUHMXZZdkbUR0cluRSkFzecQy3m5pMTYVXRkcFIBWUZYLNUNSNgQKdnpTWu" />
<button type="submit">Delete</button>
</form>
ドキュメントに基づいて、これをCakePHPアプリケーションに実装することを検討しています: http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html
ドキュメントによると、セキュリティ コンポーネントを追加すると、フォーム ヘルパーを使用するすべてのフォームにフォーム キーが自動的に追加されます。
例えば
public $components = array(
'Security' => array(
'csrfExpires' => '+1 hour'
)
);
ただし、いくつか質問があります。
1.) 削除などの一部のアクションに POST over GET を使用するのはなぜですか? コントローラーのリクエストは、ユーザーが認証されているかどうか、権限を持っているかどうか、正しいフォームキーを持っているかどうかを確認します。
2.) CakePHP の GET リクエストでセキュリティ コンポーネントを使用するにはどうすればよいですか? ルーティングも処理する必要があると思います。