Timmy Willison氏は最近、jQueryの新しいバージョンをリリースした。jQuery 3.5は、jQueryのHTMLパーサーに見られたクロスサイトスクリプティング(XSS)の脆弱性を修正している。Snykオープンソースセキュリティプラットフォームは、すべてのWebサイトの84%がjQuery XSSの脆弱性の影響を受ける可能性があると推定している。jQuery 3.5では、次のメジャーjQueryリリース(jQuery 4)でポジションセレクターが完全に削除される準備として、ポジションセレクターの:even
および:odd
に欠落しているメソッドも追加される。
Masato Kinugawa氏は、jQueryのhtmlPrefilter
メソッドにクロスサイトスクリプティング(XSS)の脆弱性を発見し、チャレンジ形式のポップアップアラートウィンドウを示す例を公開した。Kinugawa氏は、jQueryのhtml()
関数がhtmlPrefilter()メソッドを呼び出しており、それは正規表現を使用してXHTMLのようなタグをHTMLで機能するバージョンに置き換えると説明している。
これは基本的に、自己終了タグをフルブラウンタグに変換します。
<blah/> <!-- converted to --> <blah></blah>
これは本当に強力です。
<style><style/>Elon
;を考えてみましょう。innerHTML
を使用してこれをDOMに挿入すると、結果のDOMツリーは次のようになります。<style> <style/>Elon </style>
しかし、jqueryの
html()
では、まったく別の話になります。html()
で同じ入力を試みると、次のようになります。<style> <style> </style> Elon
自己終了の
<style/>
は<style></style>
に置き換えられ、2番目の<style>
タグが最初の<style>
タグのコンテンツとして扱われるようになりますが、Elon
テキストに何が起こったかを確認してみましょう。<style>
タグの外側にあり、HTMLコンテキストで開いています。ゆえに、XSSです。
jQuery 3.5の修正により、jQuery.htmlPrefilter
が恒等写像になり、以前の動作に依存するコードが破損する可能性がある。jQueryチームは、jQueryマイグレーションプラグインを使用して以前の動作に戻すことを勧めている。
以前の動作が絶対に必要な場合は、jQuery移行プラグインの最新バージョンを使用すると、古い
jQuery.htmlPrefilter
を復元する機能が提供されます。プラグインを組み込んだ後、jQuery.UNSAFE_restoreLegacyHtmlPrefilter()
を呼び出すことができ、jQueryはXHTML準拠の終了タグを再び保証するようになります。
jQueryは成熟したライブラリだが、その存在はWebサイトにも広く普及している。Snykオープンソースセキュリティプラットフォームは、JavaScriptフレームワークセキュリティの状況レポート2019で、すべてのWebサイトの84%がjQueryXSSの脆弱性の影響を受ける可能性があると推定している。jQueryは、Alexaの上位5,000のURLの79%に存在している。
メンテナンスと最適化の理由から、すべてのポジションセレクター(:first
や:last
など)はjQuery4で削除される。:even
と:odd
を除いて、ほとんどのポジションセレクターには代替方法がある。jQuery 3.5では、不足しているメソッドを追加する。$("div:even");
は、たとえば、$("div").even();
と書くことができる。
jQuery 3.5では、JavaScript独自のString.prototype.trim()を優先して、jQuery.trimを非推奨としている。jQuery 3.5には、追加のバグ修正、非推奨、変更があり、その詳細はリリースノートに記載されている(すべての詳細な変更ログを含む)。アップグレードを希望する開発者は、以前にjQuery 3にアップグレードしたことがない場合、3.5アップグレードガイドまたは3.0 Upgrade Guideを参照してください。すべての場合に、jQuery Migrateプラグインは、開発者がコードの互換性問題を特定することをサポートする。
jQuery 3.5.0は、CDNとnpmの両方から入手できる(npm install jquery@3.5.0
)。