開発者ツール · HTML エンティティ エスケープ
script、onclick、href 属性内で HTML エスケープだけでは不十分な理由
· なぜそれが重要なのか
html セキュリティ URLエンコーディング
エンティティ エスケープは HTML テキストと属性値を保護しますが、スクリプト ブロック、イベント ハンドラー、または URL 内の値は別のパーサーによって読み取られます。この投稿では、各コンテキストとそれに必要なエンコーディングについて説明します。
まだ実行されているエスケープされた値 — onclick ハンドラー内のユーザー文字列と、「」がそれを保存しなかった理由
まだ実行されているエスケープされた値 — onclick ハンドラー内のユーザー文字列と、「」がそれを保存しなかった理由。 onclick 属性は HTML として解析され、JavaScript としてコンパイルされます。 HTML 区切り文字のみをエンコードしても、ブラウザがその属性値をデコードした後も危険なプログラムが残る可能性があります。
JavaScript コンテキストをエスケープする HTML を検証するには、すべてをエスケープしても XSS レポートを取得できる開発者用のエスケープ値を構築します。ネストされたパーサーコンテキストが onclick 内で文字列を生成している間、Preserve はユーザーを実行したままになります。ハンドラーの場所と、quot が消費される理由を特定します。保存されていないという観察は、HTML テキストのみに属します。
1 つのドキュメント、複数の言語 — HTML、JavaScript、URL、CSS にはそれぞれ独自のパーサーとエスケープ ルールがあります
1 つのドキュメント、複数の言語 - HTML、JavaScript、URL、CSS にはそれぞれ独自のパーサーとエスケープ ルールがあります。単一のドキュメントで HTML、JavaScript、URL、CSS パーサーを呼び出すことができます。言語ごとに句読点に異なる意味が割り当てられるため、1 つの一般的な「エスケープ」フラグですべての目的地を安全に記述することはできません。
すべてをエスケープしても XSS レポートを取得した開発者は、HTML JavaScript URL を記録し、ネストされたパーサー コンテキスト パスの前に、1 つのドキュメントを複数の言語でテストできます。それぞれの CSS を比較し、独自のパーサーを担当するパーサーを見つけてエスケープします。この HTML エスケープ JavaScript コンテキストの結果は、実行可能コンテキストではなくルールを説明しています。
<script> 内 - なぜそこでエンティティがデコードされず、代わりに JSON または JavaScript 文字列のエスケープが必要になるのか
<script> 内 - なぜそこでエンティティがデコードされず、代わりに JSON または JavaScript 文字列のエスケープが必要になるのか。スクリプトの生テキスト内では、HTML 名前付き参照は通常のテキストのようにデコードされません。実績のあるシリアライザーを使用してデータを JSON としてシリアル化し、インライン スクリプトの補間を回避し、終了スクリプト シーケンスを考慮します。
短いネストされたパーサー コンテキスト サンプル内のエンティティをスクリプト内で分離します。そこではリテラルソースとしてデコードされず、json または javascript をその宛先として表示し、API の名前を読み取る文字列のエスケープが必要です。 JavaScript コンテキストをエスケープする HTML の場合、代わりにパーサーにバインドされた証拠が残ります。
イベント ハンドラー属性 - 最初に HTML としてデコードされ、次に JavaScript として実行されるため、2 つのエスケープ層が適用されます。
イベント ハンドラー属性 - 最初に HTML としてデコードされ、次に JavaScript として実行されるため、2 つのエスケープ層が適用されます。イベント ハンドラー属性は 2 つの文法を組み合わせているため、避けるべきです。 addEventListener を使用したバインド動作により、データが実行可能ソースに含まれないようになり、ネストされた HTML と JavaScript のエスケープが不要になります。
デコードされたイベント ハンドラー属性を境界実験として扱います。すべてをエスケープしても XSS レポートを取得した開発者は、最初に HTML として保持し、ネストされたパーサーのコンテキスト操作を 1 つ実行し、2 つのレイヤーを変更する前に 1 文字ずつ検査し、JavaScript として実行する必要があります。 apply のエスケープに関する主張は、この HTML 層で止まります。
href と src — 値のパーセント エンコーディングと属性のエンティティ エスケープ、および javascript: スキームの問題
href と src — 値のパーセント エンコーディングと属性のエンティティ エスケープ、および javascript: スキームの問題。 href と src の場合、最初に URL を構築して検証し、不要なスキームを拒否し、コンポーネントをパーセント エンコードしてから、引用符で囲まれた最後の属性値を HTML エスケープします。エンティティ変換だけでは javascript: URL は拒否されません。
顧客資料の代わりに無害な入力を使用して href および src パーセントを再現します。値のエンコーディングを記録し、エンティティのエスケープを観察し、意図的に入れ子になったパーサー コンテキスト パスをすべてカウントします。この HTML エスケープ JavaScript コンテキスト トレイルにより、開発者はすべてをエスケープしても XSS レポートを取得でき、推測することなく属性と JavaScript スキームの問題を評価できます。
成功した例: テキスト、属性、onclick、および href に配置された 1 つの値 — それぞれの正しいエンコーディング
成功した例: テキスト、属性、onclick、および href に配置された 1 つの値 - それぞれの正しいエンコーディング。同じ値が、HTML エスケープによってテキストに属し、引用符付き属性の処理によってデータ属性に属し、構造化シリアル化によってコードに属し、URL 構築とスキーム チェックによって URL に属します。
ネストされたパーサーのコンテキストのレビュー中に、テキストに配置された作業例 1 の値と onclick の属性を並べて配置します。すべてをエスケープしても XSS レポートを取得した開発者は、href で変更されたかどうかを変換時またはダウンストリームで判断できます。一般的なセキュリティ主張のそれぞれに対する正しいエンコーディングに関する HTML エスケープ JavaScript コンテキストの結論を保持します。
これでカバーされないもの — CSS インジェクションとテンプレート エンジン固有のヘルパー
これでカバーされないもの — CSS インジェクションとテンプレート エンジン固有のヘルパー。 CSS インジェクションとテンプレート エンジン固有の API は、追加の文法とフレームワーク コントラクトを導入するため、省略されています。安全な選択は、データをコードから分離した API を使用することです。
ネストされたパーサー コンテキストを実行する前に、これが実行しないことを定義します。カバー CSS インジェクションを保存し、コントロールとして、テンプレート エンジン固有のヘルパーの背後にあるコード ポイントを検査し、ネストされたパーサーのコンテキスト証拠を次のインタープリターにマップします。これにより、すべてをエスケープしたにもかかわらず、HTML エスケープ JavaScript コンテキストを調査する XSS レポートを取得した開発者にとって、ネストされたパーサー コンテキストの証拠が監査可能になります。
要点: パーサーを読み取るパーサーのエンコード — HTML エンティティ エスケーパーが HTML レイヤーを処理する方法、および同じ製品内の URL エンコーダーとデコーダーが URL レイヤーを処理する方法
要点: パーサーを読み取るパーサーのエンコード — HTML エンティティ エスケーパーが HTML レイヤーを処理する方法、および同じ製品内の URL エンコーダーとデコーダーが URL レイヤーを処理する方法。 ToolAcre は HTML レイヤーをカバーし、その URL パネルは URL コンポーネントの表現をカバーします。どちらのパネルも、認可の付与、マークアップのサニタイズ、スキームの検証、または SQL ステートメントの保護を行いません。
のテイクアウェイ エンコードを、監視可能なネストされたパーサー コンテキスト出力に接続します。ワンパス結果の横に読み取るパーサーを保持し、HTML がエンティティ エスケーパーにどのように入力するかを確認します。すべてをエスケープしても XSS レポートを取得した開発者は、HTML レイヤーと JavaScript コンテキストをエスケープする狭い HTML としてレビューできるようになります。この記事の背後にある実際的な決定は具体的です。エンティティのエスケープによって HTML テキストと属性値は保護されますが、スクリプト ブロック、イベント ハンドラー、または URL 内の値は別のパーサーによって読み取られます。この投稿では、各コンテキストとそれに必要なエンコーディングについて説明します。リーダー アクションも同様に具体的です。属性エスケープ ステップの HTML エンティティ エスケープにリンクし、ページを読み込まずに href 値の URL エンコーダおよびデコーダ パネルに切り替えることを示します。