論理脆弱性マイニング XSS脆弱性原理分析と実践訓練 | JD Logistics Technical Team

I.はじめに

2月に1億2,000万件のユーザーアドレス情報が流出し、大手企業に改めて警鐘を鳴らすなど、データセキュリティの重要性がますます高まっており、当社でもセキュリティテストの正規化に向けた決意を強めています。テスト グループでのセキュリティ テストの常態化に伴い、ロジックの脆弱性に関心を持つ同僚が増えており、この連載記事ではロジックの脆弱性の範囲、原則、予防策を明らかにし、全員のセキュリティ意識を徐々に高めていくことを目的としています。この記事では、最初の章として、よく知られている XSS ロジックの脆弱性を取り上げて紹介します。

2. XSS 脆弱性の概要

1.XSS脆弱性の定義

クロスサイト スクリプト (Cross Site Script)、Cascading Style Sheets (CSS) の略称と混同しないように、クロスサイト スクリプトは XSS と略されます。クロスサイトスクリプティング(以下、XSS)は通常クライアント側で発生し、攻撃者がWebページに悪意のあるJavaScriptコード(VBScriptやActionScriptコードなどを含む)を挿入し、ユーザーがこのページを閲覧すると、これらの悪意のあるコードが侵入します。実行されるため、ユーザーは攻撃にさらされることになります。

2. XSSの主な攻撃形態

  • ストア型クロスサイトスクリプティング攻撃

攻撃者は、アプリケーションが提供するデータの追加や改変の機能を利用して、悪意のあるデータをサーバーに保存し、そのデータが表示されているページを他のユーザーが閲覧すると、ブラウザがページに埋め込まれた悪意のあるスクリプトを実行することで、悪意のある攻撃の目的を達成します。 . この攻撃は執拗です。

  • 反射型クロスサイトスクリプティング攻撃

攻撃者は、ユーザーに URL を送信してアクセスを誘導し、ブラウザはページに埋め込まれた悪意のあるスクリプトを実行して悪意のある攻撃の目的を達成します。この攻撃は 1 回だけ実行され、永続的ではありません。

  • DOM クロスサイト スクリプティング攻撃

HTML ページでは、ユーザーが入力したデータが標準化された JavaScript によって直接操作されることはなく、攻撃者が悪意のあるコードを挿入すると、ページの最終表示時に悪意のあるスクリプトが実行され、悪意のある攻撃の目的が達成されます。 。

3.XSS脆弱性の危険性

  • 情報の盗難 (ユーザーの Cookie の盗用、ユーザー ID ログインの偽造など)
  • フィッシング詐欺
  • ワームの攻撃

3. XSS 脆弱性原理の分析

4. XSS脆弱性事例の分析

1. 保存された XSS

  • 実際には脆弱性の箇所は 2 か所あり、これは iframe の埋め込みと同様で、元の URL は test.jd.com であるため、2 つの Web サイトに直接影響します。
  • 脆弱性の証明: 次のデータ パケットを送信して、保存された XSS を挿入します。

2. 反映された XSS

  • ユニバーサル ステートメント <script>alert()</script> を入力してもポップアップ ウィンドウが表示されません。ソース コードを表示すると、<> がエスケープされていることがわかります。
  • input タグの値では、入力したコンテンツは厳密にフィルタリングされていないため、値を手動で閉じてから、スクリプト"><script>alert()</script>を実行します。

5. XSS脆弱性防止に関する意見

1. 保存および反映された XSS

保存XSSと反映XSSは、サーバー側で悪意のあるコードが取り出された後、応答HTMLに挿入され、攻撃者が意図的に書き込んだ「データ」が「コード」に埋め込まれ、ブラウザで実行されます。これら 2 つの脆弱性を防ぐ一般的な方法は 2 つあります。

1) 純粋なフロントエンドレンダリングに変更してコードとデータを分離する

HTML を完全にエスケープします。ブラウザは最初に、ビジネス関連のデータを含まない静的な HTML を読み込みます。次に、ブラウザは HTML 内の JavaScript を実行します。JavaScript は Ajax を通じてビジネス データを読み込み、DOM API を呼び出してページ上でデータを更新します。純粋なフロントエンド レンダリングでは、以下に設定する内容がテキスト (.innerText)、属性 (.setAttribute)、スタイル (.style) などであることをブラウザーに明確に伝えます。ブラウザーは簡単に騙されて予期しないコードを実行できなくなります。

ただし、純粋なフロントエンド レンダリングでも、DOM タイプの XSS 脆弱性 (onload イベントや href 内の javascript:xxx など。以下の「DOM タイプ XSS 攻撃の防止」セクションを参照) を回避するために注意する必要があります。多くの内部システムや管理システムでは、純粋なフロントエンド レンダリングを使用することが非常に適切です。しかし、高いパフォーマンス要件や SEO 要件があるページの場合は、依然として HTML の接合の問題に直面する必要があります。

2) HTMLをエスケープする

HTML の結合が必要な場合は、適切なエスケープ ライブラリを使用して、HTML テンプレート内の挿入ポイントを完全にエスケープする必要があります。

doT.js、ejs、FreeMarker などの一般的に使用されるテンプレート エンジンには、通常、HTML エスケープに関するルールが 1 つだけあり、それは & < > を置き換えるというものです。

" ' / これらの文字はエスケープされます。

2. DOM 型 XSS 攻撃を防止する

DOM タイプの XSS 攻撃は、実際には、Web サイトのフロントエンド JavaScript コード自体が十分に厳密ではなく、信頼できないデータをコードとして実行することによって引き起こされます。

.innerHTML、.outerHTML、document.write() を使用する場合は特に注意してください。信頼できないデータを HTML としてページに挿入せず、代わりに .textContent、.setAttribute() などを使用するようにしてください。

Vue/React テクノロジー スタックを使用し、v-html/dangerouslySetInnerHTML 関数を使用しない場合は、フロントエンドのレンダリング段階での innerHTML と externalHTML の XSS リスクを回避してください。

location、onclick、onerror、onload、onmouseover などの DOM 内のインライン イベント リスナー、a タグの href 属性、JavaScript の eval()、setTimeout()、setInterval() などはすべて文字列を実行できます。コードとして。信頼できないデータを文字列に繋ぎ合わせてこれらの API に渡すと、セキュリティリスクが発生しやすいため、必ず避けてください。

3. その他の XSS 防止策

XSS は、ページのレンダリング時や JavaScript の実行時に慎重にエスケープすることで防止できますが、開発上の注意だけに頼るだけではまだ十分ではありません。以下では、XSS のリスクと影響を軽減できる一般的なソリューションをいくつか紹介します。

1)コンテンツセキュリティポリシー

厳格な CSP は、XSS の防止において次の役割を果たすことができます。

複雑な攻撃ロジックを防ぐために、外部ドメイン コードを読み込むことは禁止されています。

外部ドメインからの投稿は禁止されており、Webサイトが攻撃されてもユーザーデータが外部ドメインに流出することはありません。

インライン スクリプトの実行は禁止されています (ルールは厳格で、現在 GitHub で使用されていることが判明しています)。

不正なスクリプトの実行を防止します (Google マップ モバイル バージョンで使用される新機能)。

レポートを合理的に使用すると、XSS を適時に検出し、問題をできるだけ早く解決できます。

CSP の詳細については、フロントエンド セキュリティ シリーズの以降の記事を参照してください。

2) 入力コンテンツの長さの制御

信頼できない入力の場合は、適切な長さを制限する必要があります。XSS の発生を完全に防ぐことはできませんが、XSS 攻撃をより困難にすることはできます。

3) その他のセキュリティ対策

HTTP 専用 Cookie: JavaScript による特定の機密性の高い Cookie の読み取りを防止します。XSS インジェクションの完了後、攻撃者はこの Cookie を盗むことができません。

著者:JD Logistics Fan Wenjun
出典:JD Cloud Developer Community Ziyuanqishuo Tech 転載の際は出典を明記してください

 

JetBrains が Rust IDE をリリース: RustRover Java 21 / JDK 21 (LTS) GA 中国には非常に多くの Java 開発者がいることから、エコロジーレベルのアプリケーション開発フレームワーク .NET 8 が誕生するはずであり、パフォーマンスは大幅に向上しており、 をはるかに上回っています。 NET 7. PostgreSQL 16 は、Rust チームの元メンバーによってリリースされました。大変遺憾ながら名前をキャンセルしていただきました。 昨日、フロントエンドの Nue JS の削除を完了しました。作者は、新しい Web エコシステムを作成すると言っています。 NetEase Fuxi、「バグにより人事部から脅迫された」従業員の死亡に対応 任正非氏:私たちは第4次産業革命を迎えようとしている、Appleはファーウェイの師であるVercelの新製品「v0」:UIインターフェースコードをベースに生成文章
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4090830/blog/10112033