2016-10-28 16 views
0

Laravelコントローラを使用する非PHPベースのWebクライアント(JSON)の場合。 Web要求を保護するためのLaravelのCSRFトークンの代替候補は何でしょうか?LaravelのCSRFトークンにはいくつかの選択肢がありますか?

+0

コントローラーがJSONデータまたはHTMLプラージュを返すかどうかにかかわらず、トークン(GETまたはPOSTパラメーター)をリンクに追加する必要があり、攻撃者が再現できないようにする必要があります。バックエンドで生成され、あらかじめクライアントに渡されたIDであれば、どのIDでもかまいません。 – AlexM

+0

@pumbo URLにcsrfトークンを渡すべきではありません。攻撃者がurlパラメータを保持する方が簡単かもしれません(ブラウザにこれらの情報を保存したり、プロキシがログに記録するなど)。また、トークンがクライアント上で生成されることさえあります追加のリスクはもちろんありますが、多くのシナリオではまだ十分な安全性があります。 –

答えて

0

APIがブラウザによって自動的に送信される認証トークン(実際にはトークンまたはセッションIDがクッキーに含まれていないことを意味します)に依存しない認証方式を使用する場合、APIはCSRFに対して脆弱ではありません。これには、トークンがクッキーに格納されていない限り、トークンベースの認証が含まれます。

クッキーを使用して認証トークン(これに関しては同じセッションIDを含む)を渡す場合、サーバーの状態を変更するすべての要求(主にデータですが、ログオン状態や特権レベルなど) )。

Laravelの場合、XSRF-TOKENクッキーのトークン値をリクエストヘッダ値としてX-CSRF-TOKENに渡す必要があります。 jQueryを使って、これは簡単にクッキーの値を読み取り、要求にそれを追加することにより、任意のクライアントフレームワークで達成される:あなたのクライアントはブラウザベースでない場合

$.ajaxSetup({ 
    headers: { 
    'X-CSRF-TOKEN': csrfCookieValue 
    } 
}); 

、あなたはすでにLaravelのそれと異なる保護を実装することができます。 OWASPはdouble submitが合理的に安全な状態で実装するのが最も簡単です。非常に短い間に、ランダムなトークンを作成し、それをクッキーとして、また要求ヘッダーとしてサーバーに送信します。サーバーは、2つ(クッキーとヘッダー)が一致するかどうかを比較します。これは動作します。なぜなら、異種ネットワーク(ドメイン)上の攻撃者は、ブラウザで同じ発信元ポリシーが原因で、アプリケーションオリジンのCookieを設定またはアクセスできないためです。

0

私はcsrf tokenを使用して全体のポイントは、アプリ内での使用のためだと思う。アプリケーション自体からajax経由でリクエストを送信する場合は、単にcsrf_tokenをリクエストに追加することができます。ただし、外部ソースからのデータをjson経由で送信する場合は、oAuthを使用してAPIへのアクセスを保護するのが最善の方法です。幸いにも、laravelは既にlaravel/passportでこの機能を構築していますので、実装はかなり簡単です。

関連する問題