一部のブラウザのlocation.hrefは、XSSなどのセキュリティ問題を引き起こしやすい値を返します。この挙動により、location.hrefが自分と同じドメインのURLを返すことを前提に書いているコードは全て、正しく動かなくなる恐れがあります。
1. http://l0.cm/atxss/へアクセス(このページへのシンプルなリンク)
2. location.hrefをクリックで確認
3. http://l0.cm/atxss/ が返される(想定通り)
4. http://example.com%2F@l0.cm/atxss/へアクセス(Safariではデフォルトの設定でフィッシング警告が出ますが続行してください)
5. location.hrefをクリックで確認
6. @の前の%2Fがデコードされた、http://example.com/@l0.cm/atxss/ が返される (この文字列に直接アクセスする場合、これは外部ドメイン「example.com」への参照となる)
location.hrefは自分の今居るURLそのものであると多くの人は認識しているはずです。もしこの認識に反してlocation.hrefが外部のドメインを指してしまうなら、location.hrefを頼りに新たなリソースを読み込もうとしたとき、不本意に外部ドメインのリソースを読み込んでしまうかもしれません。リダイレクトをしようとするなら、不本意に外部サイトへのリダイレクトを起こしてしまうかもしれません。
jQuery Mobile 1.2 Beta未満は読み込んでいるだけでXSS脆弱性を作ります
2012年8月 2日: 公開
2012年8月 3日: Android4.0.4が影響を受けることを追記
2012年9月 6日: jQuery Mobile について追記
2012年9月20日: iOS 6.0 が影響を受けないことについて追記