HTML / escape / context boundary

HTMLのescape contextを分ける

text、attribute、URLで必要な確認を分け、quoteとentityの境界を合成caseで確認します。実HTMLやscriptは扱わず、レビュー票だけをローカルで作ります。

5つのcontext境界

HTML escapeを一つの変換として扱うと、表示・属性・URLの受渡しを混同します。値のcontextと許可条件を分けて記録します。

text ≠ attribute ≠ URL / classify → escape → verify
レビュー
text本文の値をHTMLとして解釈させず表示する。
attribute引用符の境界を閉じ、属性を抜ける値を許可しない。
URLHTML escapeとscheme・URL検証を別条件にする。
quotesingle・double quoteとampersandを分けて確認する。
entity表示文字と受渡し先のcontextを混同しない。

安全な確認の順番

  1. 値の出力先をtext、attribute、URLに分類する。
  2. 引用符とentityの境界を合成例で確認する。
  3. URLの許可schemeをHTML escapeと別に確認する。
  4. script contextへ戻す前にレビュー票を承認する。

このページは実HTMLを解析・実行せず、ユーザー入力も受け取りません。合成caseだけを扱います。

6つの合成case

case結果
text-contextText context
attribute-contextAttribute context
url-contextURL context
quote-boundaryQuote boundary
entity-referenceEntity reference
unsupported-script-contextReject