91

リクエストとレスポンスのコンテンツに JSON のみを使用する (つまり、フォーム エンコードされたペイロードを使用しない) Web サービスを構築しています。

次の場合、Web サービスは CSRF 攻撃に対して脆弱ですか?

  1. POSTトップレベルの JSON オブジェクトを含まないリクエスト ( など){"foo":"bar"}は、400 で拒否されます。たとえばPOST、コンテンツ42を含むリクエストは拒否されます。

  2. POST以外の content-type を持つリクエストapplication/jsonは、400 で拒否されます。たとえば、POSTcontent-type を持つリクエストはapplication/x-www-form-urlencoded拒否されます。

  3. すべての GET リクエストはSafeになるため、サーバー側のデータは変更されません。

  4. クライアントはセッション Cookie を介して認証されます。これは、Web サービスが JSON データを含む POST を介して正しいユーザー名/パスワードのペアを提供した後にクライアントに提供します{"username":"user@example.com", "password":"my password"}

補助的な質問:PUTおよびDELETEリクエストは CSRF に対して脆弱ですか? ほとんどの (すべての?) ブラウザーは、HTML フォームでこれらのメソッドを許可していないようです。

編集:項目#4を追加しました。

編集: これまでに多くの良いコメントと回答がありましたが、この Web サービスが脆弱な特定の CSRF 攻撃を提供した人はいません。

4

5 に答える 5

79

フォームのメソッドはGETとPOSTに制限されており、フォームのPOSTメッセージ本文も3つの形式application/x-www-form-urlencoded、、、multipart/form-dataおよびtext/plainに制限されているため、任意のメディアタイプで任意のCSRFリクエストを偽造することはXHRでのみ事実上可能です。ただし、フォームデータエンコーディングを使用すると、text/plain有効なJSONデータを含むリクエストを偽造することができます

したがって、唯一の脅威はXHRベースのCSRF攻撃です。そして、それらが同じ起源からのものである場合にのみ成功するので、基本的にはあなた自身のサイト(例えばXSS)からのものです。CORSの無効化(つまり、Access-Control-Allow-Origin:*を設定しない)を保護と間違えないように注意してください。CORSは、クライアントが応答を読み取れないようにするだけです。リクエスト全体は引き続きサーバーによって送信および処理されます。

于 2012-06-13T22:42:51.710 に答える
1

Ajax を使用して、JSON ベースの Restful サービスで CSRF を実行できます。これをアプリケーションでテストしました (Chrome と Firefox の両方を使用)。プリフライト リクエストを回避するには、contentType を text/plain に、dataType を JSON に変更する必要があります。その後、リクエストを送信できますが、セッションデータを送信するには、ajax リクエストで withCredentials フラグを設定する必要があります。これについては、ここで詳しく説明します (参考文献が含まれています)。

http://wsecblog.blogspot.be/2016/03/csrf-with-json-post-via-ajax.html

于 2016-03-18T10:39:47.163 に答える
-1

3.については疑問があります。サーバー側のデータを改竄しないので安全と言えますが、データを読み取ることができ、盗まれる危険性があります。

http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx/

于 2014-03-07T17:34:03.620 に答える
-7

次の場合、Web サービスは CSRF 攻撃に対して脆弱ですか?

はい。まだHTTPです。

PUT および DELETE リクエストは CSRF に対して脆弱ですか?

はい

ほとんどの (すべての?) ブラウザーは、HTML フォームでこれらのメソッドを許可していないようです。

ブラウザーが HTTP 要求を行う唯一の方法だと思いますか?

于 2012-06-13T08:53:03.727 に答える