日本語

開発者ツール · HTML エンティティ エスケープ

HTML のエスケープ、ストリップ、またはサニタイズ: 3 つのテクニックとそれぞれをいつ使用するか

· 仕組み

html セキュリティ テキスト処理

HTML のエスケープ、ストリップ、またはサニタイズ: 3 つのテクニックと、それぞれをブラウザーセーフな文字参照図として示すいつ使用するか
オリジナル ToolAcre ベクトル イラスト

エスケープするとマークアップがテキストとして表示され、ストリッピングするとマークアップが削除され、サニタイズすると安全なサブセットが保持されます。この投稿では、各テクニックが実際に何を行うのか、それぞれが失敗する場所、および入力に適切なテクニックを選択する方法について説明します。

コードを表示するはずだったコメントが、代わりに実行されました - 3 つの手法のうちの間違った選択

コードを表示するはずだったコメントが、代わりに実行されました。3 つの手法のうちの間違った選択です。マークアップを表示することを目的としたコメントは、アプリケーションがそれを HTML としてレンダリングするときに実行できます。最初の決定は、製品がプレーン テキストを必要とするか、マークアップなしを必要とするか、または意図的に制限されたリッチ サブセットを必要とするかです。

HTML のエスケープとサニタイズを検証するには、コメント システムを構築する開発者向けのコメントを作成します。 3 つの操作の選択が生成され、代わりに実行される間、表示されるコードを保持する必要があります。間違った選択がどこで消費されるかを特定します。 3 つのテクニックに関する観察は HTML テキストのみに属します。

エスケープ: マークアップが表示テキストになります — 何が変更され、何が保持され、それがデフォルトであるのか

エスケープ: マークアップが表示テキストになります - 何が変更され、何が保持され、それがデフォルトであるのか。エスケープすると、すべての文字が保持されますが、マークアップに重要な文字は参照に変更されます。ブラウザでは元のシンボルがテキストとして表示されるため、これがコメントやコード例の正しいデフォルトになります。

コメント システムを構築する開発者は、3 つの操作の選択パスの前に、何が変更されたかをテキストに記録することで、マークアップのエスケープが表示されることをテストできます。比較は保持されますが、その後、それを担当するパーサーを見つけるのがデフォルトです。このエスケープとサニタイズ HTML の結果は、実行可能なコンテキストではなく、3 つの操作の選択の証拠を説明しています。

ストリッピング: タグの削除 — 正規表現タグのストリップが信頼できない理由と、それによって失われるもの

ストリッピング: タグの削除 — 正規表現タグのストリップが信頼できない理由と、それによって失われるもの。ストリップでは、明らかなタグが削除され、構造、句読点、単語が失われます。正規表現では、ブラウザーのエラー回復、生のテキスト要素、または不正なネストを安全性を定義するのに十分な信頼性でモデル化することはできません。

短い 3 つの操作の選択サンプルで、タグの削除と削除を分離します。正規表現タグの除去をリテラルソースとして表示し、信頼性の低いものをその宛先まで追跡し、API の読み取りが失われる名前を示します。 HTML のエスケープとサニタイズの場合、3 つの操作の選択の証拠はパーサーに拘束された証拠のままです。

サニタイズ: サブセットの許可 — 許可リスト、属性ルール、および 3 つのルールの中で最も難しい理由

サニタイズ: サブセットの許可 — 許可リスト、属性ルール、およびそれが 3 つの中で最も難しい理由。サニタイズでは、マークアップを解析またはトークン化し、要素、属性、および URL スキームの明示的な許可リストを保持します。ブラウザの解釈、不正な入力、ネストされた言語が問題となるため、これはかなり困難です。

サブセットを境界実験として許可するサニタイジングを扱います。コメント システムを構築する開発者は、許可リストの属性ルールを保持し、3 つの操作からなる選択操作を 1 つ実行し、最も難しいルールを変更する前に、その理由を 1 文字ずつ検査する必要があります。この HTML 層で約 3 つの主張が止まります。

作業例: 3 つすべてで同じユーザー入力 - 結果のテキストまたはマークアップを比較

実用的な例: 3 つすべてに同じユーザー入力が行われ、結果のテキストまたはマークアップが比較されます。 <strong onclick="go()">Hi & bye</strong>, エスケープするとソース全体が表示され、ストリッピングは Hi & bye を目的としており、実証済みのポリシーに基づいて onclick を削除してもサニタイズは保持<strong> される可能性があります。

顧客資料の代わりに無害な入力を使用して、同じ動作例を再現します。すべてのユーザー入力を記録し、結果のテキストを 3 つ観察し、意図的な 3 つの操作選択パスをすべてカウントします。このエスケープとサニタイズの HTML トレイルにより、コメント システムを構築する開発者は、推測することなく、比較された 3 つの操作の選択の証拠を評価またはマークアップできます。

意図による選択 — プレーン テキストとコード サンプルはエスケープされます。リッチテキストのサニタイズ。ストリッピングが正しいことはめったにない

意図による選択 — プレーン テキストとコード サンプルはエスケープされます。リッチテキストのサニタイズ。ストリッピングが正しいことはほとんどありません。意図から選択: プレーン テキストと例はエスケープされます。サポートされているリッチ テキストは、維持されている専用のポリシーによってサニタイズされます。ストリッピングは不可逆変換であり、XSS 保証ではありません。

3 つの操作の選択レビュー中に、インテントによる選択をプレーン、テキスト、コード サンプルとエスケープ リッチ テキスト サニタイズに並べて配置します。コメント システムを構築する開発者は、変換時または下流でストリッピングが正しく変更されることがほとんどないかどうかを判断できます。 3 つの操作の選択の証拠に関するエスケープとサニタイズ HTML の結論を、一般的なセキュリティ主張から外してください。

これでカバーされないもの — 追加レイヤーとしてのマークダウン レンダリングとコンテンツ セキュリティ ポリシー

これでカバーされないもの — 追加レイヤーとしてのマークダウン レンダリングとコンテンツ セキュリティ ポリシー。 Markdown と Content Security Policy では、別の段階が追加されます。 Markdown は安全なレンダリングを必要とする HTML を生成しますが、CSP は結果を制限できますが、安全でない出力の決定は修正しません。

3 つの操作の選択を実行する前に、これが実行しないことを定義します。カバー マークダウン レンダリングを保存し、コントロールとしてコンテンツ セキュリティ ポリシーの背後にあるコード ポイントを検査し、追加のレイヤーを次のインタープリターにマップします。これにより、HTML のエスケープとサニタイズを調査するコメント システムを構築する開発者にとって、3 つの操作の選択の証拠が監査可能になります。

要点: ToolAcre はエスケープのみを実行し、ストリッピングやサニタイズは実行しません

要点: ToolAcre はエスケープのみを実行し、ストリッピングやサニタイズは実行しません。 ToolAcre はエスケープ処理のみを実行します。これは XSS サニタイザーではなく、安全なリッチ レンダリングのために敵対的な HTML を受け入れません。マークアップ形式の入力を HTML テキストに変換します。

Connect Takeaway Toolacre は、監視可能な 3 つの操作の選択出力へのエスケープを実行します。ストリップを行わないこと、または 1 パスの結果の横にだけを置いてから、サニタイズが 3 つの操作の選択の証拠に入る場所を確認します。コメント システムを構築している開発者は、3 つの操作の選択の証拠を、HTML の所見をサニタイズして九死に一生を得てレビューできるようになりました。この記事の背後にある実際的な決定は具体的です。エスケープするとマークアップがテキストとして表示され、ストリッピングするとマークアップが削除され、サニタイズすると安全なサブセットが保持されます。この投稿では、各テクニックが実際に何を行うのか、それぞれが失敗する場所、および入力に適切なテクニックを選択する方法について説明します。リーダーのアクションも同様に具体的です。HTML エンティティ エスケープにリンクし、ユーザー入力のスニペットをエスケープしてリテラル マークアップとして表示する方法を示します。