Cookie 内に保持されているセッション ID で認証し、クエリ パラメータとして nonce を追加し、(コールバックを使用した JSONP スタイルの応答とは対照的に) JSON の「オブジェクト」応答で常に応答する SSL 化された API を構築する場合、それは一般的に、特に XSRF に対して安全ですか?
このような API の意図は、自分のドメインのページでのみ使用できるようにし、この API を介して個人データ (ユーザー名や電子メールなど) を自由に公開できるようにする (ただし、他のドメインでは使用できない) ことです。チームの開発者にとって合理的な単純さ。
少なくとも、このアプローチについて私が理解していることと、それが安全だと思う理由を共有させてください. 間違っている場合は教えてください!:
- サードパーティのドメインにドロップされた
<script>
タグは、Cookie をサイトに送信しますが、JSON オブジェクトの応答を解析することはできません (そして、応答は常に意図的に最上位の JSON オブジェクトになります)。また、<script>
タグは GET を使用する必要があり、状態を変更する呼び出し (つまり、 HTTP メソッドに関する限り、API は REST に準拠します)。また、JSONP はセキュリティ ホールになるため、意図的にサポートしていません。 - 私は有効な証明書で SSL を使用しているため、Cookie (セッション) をハイジャックするために使用される中間者は問題ではありません。
- ノンスを使用すると、HTTPS リクエストのリプレイで送信できる時間が制限されるため、リプレイ攻撃は一時的に限定された懸念事項です。典型的なノンス検証方法。
- XMLHttpRequest はクロスドメイン呼び出しを行うことができないため、私のサイトからは何も要求できません。
- 私は crossdomain.xml ファイルや、HTML 5 に関連するクロスドメイン サポートのその他の広告を持っていないため、CORS (Cross ORigin Resource Sharing) は問題ではありません。
- サードパーティ サイトの iframe は問題ではありません。これは、ページをグラフィカルに読み込むことはできますが、ホスト サイトはその iframe 内のデータにアクセスできないためです。また、クロスドメイン iframe 通信をサポートする試みを行っていないためです。 (したがって、クロスドメインiframe間の通信を有効にするために人々が行うように、iframe URLに#を設定しようとすることができますが、私のページはそれに応答しません).
編集:<script>
russau が言うよう
に、ナンスはクロスドメインの GET リクエスト (つまり、タグ) からも保護します。具体的に考えてみると、「POST」API 呼び出しでナンス自体が保護されていないナンスを要求するというアイデアが気に入っています。同じドメインの XmlHTTPRequest のみがナンスを生成できるようにする必要があります。これは、nonce の生成を開発者にとって使いやすくするための簡単な方法のようです。(つまり、ウェブサイト/JavaScript 開発者向けのサーバー側は何もありません。開発に使用しているのと同じ API からナンスを要求し、「悪いナンス」応答が得られるまでそのナンスでリクエストを行います。新しいもののために、繰り返します。