BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース jQuery 3.5がリリースされ、XSSの脆弱性が修正された

jQuery 3.5がリリースされ、XSSの脆弱性が修正された

原文(投稿日:2020/04/17)へのリンク

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)。

この記事に星をつける

おすすめ度
スタイル

BT