Laravelコントローラを使用する非PHPベースのWebクライアント(JSON)の場合。 Web要求を保護するためのLaravelのCSRFトークンの代替候補は何でしょうか?LaravelのCSRFトークンにはいくつかの選択肢がありますか?
答えて
APIがブラウザによって自動的に送信される認証トークン(実際にはトークンまたはセッションIDがクッキーに含まれていないことを意味します)に依存しない認証方式を使用する場合、APIはCSRFに対して脆弱ではありません。これには、トークンがクッキーに格納されていない限り、トークンベースの認証が含まれます。
クッキーを使用して認証トークン(これに関しては同じセッションIDを含む)を渡す場合、サーバーの状態を変更するすべての要求(主にデータですが、ログオン状態や特権レベルなど) )。
Laravelの場合、XSRF-TOKEN
クッキーのトークン値をリクエストヘッダ値としてX-CSRF-TOKEN
に渡す必要があります。 jQueryを使って、これは簡単にクッキーの値を読み取り、要求にそれを追加することにより、任意のクライアントフレームワークで達成される:あなたのクライアントはブラウザベースでない場合
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': csrfCookieValue
}
});
、あなたはすでにLaravelのそれと異なる保護を実装することができます。 OWASPはdouble submitが合理的に安全な状態で実装するのが最も簡単です。非常に短い間に、ランダムなトークンを作成し、それをクッキーとして、また要求ヘッダーとしてサーバーに送信します。サーバーは、2つ(クッキーとヘッダー)が一致するかどうかを比較します。これは動作します。なぜなら、異種ネットワーク(ドメイン)上の攻撃者は、ブラウザで同じ発信元ポリシーが原因で、アプリケーションオリジンのCookieを設定またはアクセスできないためです。
私はcsrf token
を使用して全体のポイントは、アプリ内での使用のためだと思う。アプリケーション自体からajax経由でリクエストを送信する場合は、単にcsrf_token
をリクエストに追加することができます。ただし、外部ソースからのデータをjson
経由で送信する場合は、oAuth
を使用してAPIへのアクセスを保護するのが最善の方法です。幸いにも、laravelは既にlaravel/passportでこの機能を構築していますので、実装はかなり簡単です。
- 1. PlayNにはいくつかの選択肢がありますか?
- 2. 1つのモデルのフィールドで多くの選択肢がありますか?
- 3. トラフィックが多いパーセンテージベースの選択肢はありますか?
- 4. 有効な選択肢を選択してください。選択肢は選択肢の1つではありません
- 5. BlogMLプロジェクトは死んでいますか?いくつかの選択肢はありますか?
- 6. MPIとOpenMP。私には選択肢がありますか?
- 7. 詳細:「CSRFが失敗しました:CSRFトークンが見つからないか正しくありません。
- 8. 次のOOPデザインにはより良い選択肢がありますか?
- 9. Laravel 4のいくつかのURLのcsrfトークンを無効にする方法
- 10. ModelMultipleChoiceField CheckboxSelectMultiple有効な選択肢を選択します。その選択肢は利用可能な選択肢の1つではありません
- 11. MSSQLとSQLのデータ型の選択肢はありますか?
- 12. スカラオプションのパターンマッチングの選択肢はありますか?
- 13. 「CSRF失敗:CSRFトークンが見つからないか正しくありません。」 Django Rest:UpdateModelMixin
- 14. いくつかのボックスで最初の選択肢にドロップダウンリセット
- 15. このクエリには、よりスケーラブルなサブ選択肢がありますか?
- 16. UIScrollViewのバグは、より良い選択肢はありますか?
- 17. mongoDBにはどのようなJASSPERSoftの選択肢がありますか?
- 18. Solaris 11.3のDockerにはどのような選択肢がありますか?
- 19. Laravel behat CSRFトークン
- 20. PHPのSOAP拡張に代わる良い選択肢がありますか?
- 21. 有効な選択肢を選択してください。 xは利用可能な選択肢の1つではありません
- 22. 有効な選択肢を選択してください。 'xxx'は利用可能な選択肢の1つではありません
- 23. [LSApplicationWorkspace defaultWorkspace]と-allApplicationsにはどのような選択肢がありますか?
- 24. ピンタックスにはどのような選択肢がありますか?
- 25. Django - CSRFトークンが見つからないか正しくない
- 26. カピバラで睡眠を使うのに良い選択肢はありますか?
- 27. このクエリに2つの選択肢があるのはなぜですか?
- 28. "CSRF検証に失敗しました。CSRFトークンがないか正しくありません。ジャンゴ
- 29. 選択肢から選択肢を選択し、表のセルに選択肢の情報を表示
- 30. OpenGLは私にとっては難しいですが、何か別の選択肢がありますか?
コントローラーがJSONデータまたはHTMLプラージュを返すかどうかにかかわらず、トークン(GETまたはPOSTパラメーター)をリンクに追加する必要があり、攻撃者が再現できないようにする必要があります。バックエンドで生成され、あらかじめクライアントに渡されたIDであれば、どのIDでもかまいません。 – AlexM
@pumbo URLにcsrfトークンを渡すべきではありません。攻撃者がurlパラメータを保持する方が簡単かもしれません(ブラウザにこれらの情報を保存したり、プロキシがログに記録するなど)。また、トークンがクライアント上で生成されることさえあります追加のリスクはもちろんありますが、多くのシナリオではまだ十分な安全性があります。 –