リクエストとレスポンスのコンテンツに JSON のみを使用する (つまり、フォーム エンコードされたペイロードを使用しない) Web サービスを構築しています。
次の場合、Web サービスは CSRF 攻撃に対して脆弱ですか?
POST
トップレベルの JSON オブジェクトを含まないリクエスト ( など){"foo":"bar"}
は、400 で拒否されます。たとえばPOST
、コンテンツ42
を含むリクエストは拒否されます。POST
以外の content-type を持つリクエストapplication/json
は、400 で拒否されます。たとえば、POST
content-type を持つリクエストはapplication/x-www-form-urlencoded
拒否されます。すべての GET リクエストはSafeになるため、サーバー側のデータは変更されません。
クライアントはセッション Cookie を介して認証されます。これは、Web サービスが JSON データを含む POST を介して正しいユーザー名/パスワードのペアを提供した後にクライアントに提供します
{"username":"user@example.com", "password":"my password"}
。
補助的な質問:PUT
およびDELETE
リクエストは CSRF に対して脆弱ですか? ほとんどの (すべての?) ブラウザーは、HTML フォームでこれらのメソッドを許可していないようです。
編集:項目#4を追加しました。
編集: これまでに多くの良いコメントと回答がありましたが、この Web サービスが脆弱な特定の CSRF 攻撃を提供した人はいません。