JSON APIのURLをIEで開くと勝手にContent-Typeをtext/htmlと推測してしまうことがある。その場合、XSS攻撃ができてしまう場合がある
これの対策として
- JSONだけども、HTMLのエスケープをする
- X-Content-Type-Options: nosniffを設定する
- XHRを利用する時は、X-Requested-Withヘッダを設定し、設定していなければサーバ側でエラーにする
などがある。
1,2は知っていたけど、3は初めて知った。
2は楽なのだけども古いIEだと対応していないという問題がある。1は古いIEでも有効なんだけども、本来エスケープしなくていいものをエスケープするのがやな感じがする。
というわけで、2と3の組合せが良さそう。
で、X-Requested-WithヘッダはjQueryやprototype.jsでは自動的に設定してくれる。ただし、クロスドメインのXHRだと、標準ではないヘッダを付けてしまうために、preflightのリクエストが発生してうまくいかない場合があるらしい。というわけで、クロスドメインだとヘッダを自動に設定しない実装になっているフレームワークもある。