私はHapiのプラグインCrumbを使ってCSRF攻撃を解決しようとしていますが、私は解決策の流れを得ていないようです。 私は単純に、各httpレスポンスにトークンをクッキーとして設定できます。クライアントがトークンを発行した場合、RESTがCSRFトークンを検証する方法は? RESTバックエンドがこのランダムな文字列がこの要求に対して有効で、別のランダムな文字列が何であるかを理解する方法は?CSRFトークンの検証方法
答えて
クライアントでCSRFトークンを生成することはできません。これはサーバーからクライアントに最初に送信する必要があり、一部のJSフレームワークはCookieから自動的に抽出してサーバーに送信します。
基本的な考え方は、ユーザーがクッキーとともにトークンを送信することになっていることと、ポストデータにもあるということです。ここに簡単な例があります。攻撃者が特定のリクエストをサービスに送信するようユーザーを欺く場合、たとえば悪意のあるWebサイトにはこのリンクの画像src="gmail.com/deleteaccount=true"
がある可能性があります。ユーザーがgmailにログインしている場合。 Gmailは、リクエストとともに送信されたCookieが有効であるため、リクエストを行ったユーザーであると考えます。だから、それが実際にユーザーであることを確認するために、gmailは要求データと共にトークンを送信する必要があります。gmail.com/deleteaccount=true
の代わりに、gmail.com/deleteaccount=true&token=987y23459827345sdfg.
のトークンがCookieに格納されているものと一致する必要があります。したがって、リクエストがサーバーによって受信されると、Cookie内のトークンがリクエスト本体内のトークンと等しいかどうかがチェックされます。攻撃者はユーザーのCookieにアクセスできず、トークンを知らない。ここ は、単純化されたデータフローである:より詳細に
それは次のようになります。
- 1)ユーザーは、とクッキーを設定し、サーバー
- 2)サーバーにGETリクエストを送信します sessionidトークンでセッションデータを保存する
- 3)サーバーは、隠しフィールドにトークンを含むフォームでHTMLを返します。
- 4)ユーザーがセッションストレージに保存されたトークンを使用して隠しフィールド
- 5)サーバが 送信されたフォーム(非表示フィールドからトークンを比較)と共に、 フォームを送信します。一致する場合は、ユーザーがフォームを送信したことを意味します。ここで
別の火格子の答えです:Why is it common to put CSRF prevention tokens in cookies?
- 1. Django DRF - トークン認証でCSRF検証を行う方法
- 2. Deviseトークンの認証がCSRFトークンの真正性を検証できない
- 3. Laravel 5.1/AngularJS:Angular Viewでパスワードをリセットする(CSRFトークンを検証する方法)
- 4. a)CSRFトークン+ SSLなしのHTTP認証、またはb)deviseでCSRFトークンを要求する方法
- 5. azure-ad-jwtトークンの検証方法
- 6. ajaxのCSRFトークン
- 7. PHP CSRFフォームトークン+検証アドバイス
- 8. Zend Framework 2 CSRF検証
- 9. フラスコとcsrfトークン
- 10. Flask-Security CSRFトークン
- 11. CSRF同期トークン
- 12. csrfトークン続き
- 13. csrfトークンdajaxice
- 14. Laravel behat CSRFトークン
- 15. Yii 1.1.17:Angular Controller経由のPOSTでCSRFトークンの検証が失敗する
- 16. vueコンポーネントのCsrfトークン
- 17. ajaxリクエストのCSRFトークン
- 18. csrfトークンの使用
- 19. CSRFトークンの生成
- 20. firebaseに対する認証トークンを検証する方法は?
- 21. "CSRF検証に失敗しました。CSRFトークンがないか正しくありません。ジャンゴ
- 22. アンドロイドでのcsrf検証のタイプエラー
- 23. csrfトークン:CSRF攻撃が検出されました。バックエンド用のみ
- 24. フォーム検証なしのCodeigniter csrf保護
- 25. CSRF攻撃を実証する方法
- 26. PHPフォーム内のLaravel csrfトークン
- 27. DjangoとiOSのCSRFトークン
- 28. Angular2のHttp Laravel CSRFトークン
- 29. ブラウザエクステンションからのCSRFトークン
- 30. 403エラー - モーダルウィンドウのCSRFトークン
ユーザーがポストを作るときつまり、ランダムに生成されたトークンはクッキーにすぐに保存し、それがサーバーになると、サーバーはクッキートークンとリクエストトークンが同じでチェックか否か。それが同じであれば、それはアクセスを与える??? @RB_ – WahidSherief
@WahidSherif最も単純な形式では、次のようになります。1 - ユーザーのセッションにトークンを保存します。 2 - 同じトークンを含む非表示フィールドをレンダリングしているフォームに追加します。フォームが送信されると、CSRFトークンが含まれるため、ユーザーがフォームを送信したことがわかります。 –
たとえば、Xはサーバー、Yはユーザーです。 Yが何かをXに投稿するたびにトークンが生成されます。Yはフォームを送信している間にトークンをYのセッションに保存します。トークンはサーバーXへの隠しフィールドとして移動します。XはセッショントークンとYの隠しトークンの両方をチェックします。一致した場合、Xは入力を許可します。 ?? – WahidSherief