JSONPOSTを使用したCSRF



Csrf With Json Post



解決:

少なくともチェックする必要がありますContent-Type:リクエストに応じたapplication / json。

POSTを取得することはできませんでリクエストを送信するにはコンテンツタイプ:application / json。ただし、本文に有効なJSON構造を含むフォームを次のように送信できます。enctype = 'text / plain'。



クロスオリジン(CORS)XMLHttpRequestPOSTをで実行することはできませんContent-Type:クロスオリジンを認識しないサーバーに対するapplication / json。これにより、「プリフライト」HTTPOPTIONSリクエストが最初にサーバーを承認するためです。ただし、クロスオリジンXMLHttpRequest POST withCredentialsの場合は、送信できます。テキスト/プレーン。

だからでもアプリケーション/ jsonチェックでは、完全にそこにない場合でも、XSRFにかなり近づくことができます。そして、それを安全にするためにあなたが頼っている振る舞いはややあいまいであり、まだ草案の段階にあります。これらは、Webの将来を保証するものではありません。



たとえば、新しいJSONの場合、これらは壊れることがありますenctypeは、将来のHTMLバージョンでフォームに追加されました。 (WHATWGはtext / plain enctypeをHTML5に追加し、元々は追加も試みましたtext / xmlなので、これが発生する可能性があることは問題外ではありません。)CORS実装における、より小さく、より微妙なブラウザーおよびプラグインのバグによる侵害のリスクが高まります。

したがって、今のところはおそらくそれを回避することができますが、適切なアンチXSRFトークンシステムなしで先に進むことは絶対にお勧めしません。


https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_Flashによると、これはFlashを使用して悪用できます。



ブラウザスタックを介してCookieを含むクロスドメインHTTPGETおよびPOSTリクエストを作成する機能。通常、ブラウザの他の場所で見られるよりも制約が少なくなります。これは、URLRequestAPIを介して実現されます。この機能には、特に、任意のContent-Type値を指定し、バイナリペイロードを送信する機能が含まれています。

私はそれを自分でテストしていませんが、もっともらしいようです。

更新:最新のFlashリリースでは、デフォルトでクロスドメインリクエストが許可されなくなったため、これを利用できなくなったようです。

アップデート#2:ただし、フラッシュの307リダイレクトの処理には長年の脆弱性があり、これは依然として悪用可能であることを意味します