生成AIの返答をウェブ画面に表示するとき、文章に混ざったHTMLやリンクが問題になることがあります。モデルの出力も外部から受け取るデータとして扱い、表示先に合った処理を通す必要があります。OWASPの指針を基に、Markdownを表示するまでの境界を確認します。
一次資料:OWASPの安全な出力処理の指針(確認:2026年10月6日)
Each variable used in the user interface should be passed through an output encoding function.
出典:OWASP Cross Site Scripting Prevention Cheat Sheet。引用は、画面へ入れる値に出力先に応じたエンコード処理を求めています。Markdownの解析だけで、安全な表示が保証されるわけではありません。

OWASPは出力先ごとに処理を分ける
同じ文字列でも、HTML本文、属性、URL、JavaScriptへ入れると必要な処理が変わります。Markdownの描画処理がHTMLを生成する場合、生成AIの返答は外部入力と同じ扱いです。
「モデルが作った文章だから安全」という前提は置けません。攻撃者が入力文や参照文書へ埋めた文字列が、そのまま返る可能性があります。
解析してから無害化処理し、安全な出力先へ渡す
生のHTMLは既定で無効にします。MarkdownをDOMへ変換した後、許可する要素と属性だけを無害化処理へ通します。その結果をinnerHTMLへ直接渡す箇所は1か所に集約します。
無害化処理後のHTMLを文字列置換すると、無害化した構造を壊すことがあります。リンク装飾やコードの色分けは、無害化処理前後の責任範囲を決めて実装します。
URLと画像は通信方式・ホストを絞る
javascript:や予期しないdata:を拒否し、通常はhttps:だけを許可します。画像の外部URLは閲覧者のIPや参照元を外部へ送るため、中継または許可ホストを使います。
リンクを開く前には、表示文字列と実際のリンク先が異ならないかを確認します。短縮URLや転送先も同じ検査へ戻します。
CSVは先頭文字を表計算ソフトへ渡さない
生成AIが作るCSVも外部入力です。数式インジェクションでは、セル先頭の=、+、-、@に加え、タブ、復帰、改行、=、+、-、@などの全角文字も検査します。区切り文字や引用符を使って途中から新しいセルを始められるため、CSVとして分割・引用符処理した後の全セルを調べます。
二重引用符で囲み、先頭へ単一引用符を加える方法も、Excelで保存して開き直すと効かない場合があります。すべての表計算ソフトと後続処理に共通する万能な処理はないため、対象の表計算ソフト、保存後の再読込み、業務システムへの取込みまで試験します。Excel向けのタブ接頭辞はデータにタブが残り、後続取込みへ影響するため、人が閲覧する用途に限定します。
Trusted TypesはDOMへの最後の入口を閉じる
Trusted Typesは、危険なDOMの出力先へ任意文字列を渡す実装をブラウザ側で止めます。無害化処理を置き忘れた新機能を検知する補助線になります。
ただし、許可規則が雑なら効果はありません。CSPの報告と試験で、未許可の出力先が残っていないことを確認します。
