6

モデルレイヤーですべてのフォームデータを検証しますが、フォームが送信された場所 (HTTP リファラー) も確認し、クロスサイトリクエストフォージェリを防ぐためにフォームと一緒にトークンを送信します。私の質問は、これらのチェックをどこで行うべきかです。 ? コントローラーまたはモデルレイヤーで?

私はこれを達成するためのいくつかの異なる方法を考えていました.1つは、フォームソースと投稿されたトークンを検証するために、ある種の保護されたメソッドを持つことでしたAbstractControllerが、それはSRPを壊す可能性があります.

4

2 に答える 2

5

(..) これらのチェックはどこで行う必要がありますか? コントローラーまたはモデルレイヤーで?

ない。

私の謙虚な意見では、CSRF 保護は他の形式のアクセス制御と同じレベル、つまり MVC トライアドの外で処理する必要があります。

アプリケーションがトークンの検証に失敗した場合、Requestインスタンス (またはその代替) のデータが信頼できないことを意味するため、破棄する必要があります。インスタンスのおよび/の初期化の前に、このようなチェックを実行します。ControllerView

于 2013-06-04T17:33:55.240 に答える
2

基本的に、さまざまな意図でデータを複数回チェックするのが賢明です。これらのレベルをお勧めします:

1) プリフロントコントローラーは、受信したデータの整合性をチェックします。トークンを紛失したり、ブラウザなどからタイムアウトが発生した場合は、すぐに終了します。これらのリクエストが MVC に届かないようにします。ここでsuoshinが必要になる場合があります。その理由は、より深いレベルでは、エラーが発生した場合でも、保護されたデータをブラウザーと通信する可能性があるためです。誰かがセキュリティ トークンを見逃した (攻撃?) と想像してください。ビューはエラー メッセージを返し、いくつかの Cookie を設定します。これらを使用すると、攻撃者は無効なフォーム リクエストの後にログインする可能性があります。

2) フロント コントローラは、入力された情報がそのユーザーなどからそのフォームに入力される可能性があるかどうかを確認します (たとえば、米国のユーザーがカナダの電話番号を入力する可能性がある場合)。 " 等々。

3) モデルは、データが安全に保存および返される状態にあるかどうかを検証します。たとえば、データがエスケープされているか、正しい長さであるかなどです。

于 2013-06-04T17:36:01.400 に答える