【Ajax】 Ajaxにおけるセキュリティ

Ajax特有のリスク

 * Ajax特有のリスクを考える。
http://www.websec-room.com/2013/07/28/876
http://d.hatena.ne.jp/ockeghem/20110907/p1
が参考になる

【1】XSS

1-1) 対応

 (1) 「X-Requested-With: XMLHttpRequest」 のあるリクエストのみを許可する
  => X-Requested-With の値によって、リクエストがAjaxのものなのか、Ajax以外のものかを判別することができる
  => X-Requested-With のない場合、サーバ側でエラーにする
 (2) エスケープ処理を施す(「<」「>」などの)
 (3) Content-Type を "application/json; charset=utf-8" にする

【2】JSONハイジャック(JSON Hijacking)

 * JSONを使用したサイトにログイン中のユーザが、悪意のサイトにアクセスすると
   Webサーバー上の機密情報を盗み出す攻撃。

2-1) 対応

 (1) 「X-Requested-With: XMLHttpRequest」 のあるリクエストのみを許可する
 (2) POST のみを許可する
 (3) JSONデータの先頭にwhile(1); / for(;;); などを書いて、
     script要素から呼ばれた場合、無限ループにする
 (4) JavaScriptとして不完全なJSONを送り、後から補う
  => (3)(4)は難しいなー

■ クロスドメイン制約について

 * Ajaxは、セキュリティ上の理由から、別ドメインのサーバとは通信できない制約がある

クロスドメイン制約を回避するには : JSONP(JSON with Padding)

 * Padding : 不要なもの、付け足し
 * JSON形式のデータにコールバック関数の呼び出しのためのコードを付加することで、
   クロスドメインでデータの受け渡しを実現するためのデータ形式
http://tutty.info/496
http://www.atmarkit.co.jp/ait/articles/0908/10/news087.html


関連記事

セキュリティ攻撃一覧

http://blogs.yahoo.co.jp/dk521123/25278676.html

jQueryを使ったAjax通信 ~基本編~

http://blogs.yahoo.co.jp/dk521123/35781333.html