HTML Escape/Unescape|XSS 対策の基本と 5 大特殊文字のエンティティ化
HTML XSS セキュリティ
結論:30秒で HTML エスケープをマスターする
- 基本原則: ユーザー入力を HTML 内に直埋めする際は必ず
&,<,>,",'を置換 - JS での安全な表示:
element.textContent = str(自動でエスケープ処理される) - 変換ツール: 下のコンポーネントで即座に相互変換
1. オンライン HTML エスケープ / アンエスケープ
入力テキストの特殊文字を HTML エンティティに変換(または逆変換)します。
🛡️ この場でHTMLエスケープする
2. エスケープ対象文字とエンティティ変換表
| 文字 | 記号 | 変換後の HTML エンティティ | 危険性の理由 |
|---|---|---|---|
< | 小なり | < | タグの開始文字(<script> 等の注入防止) |
> | 大なり | > | タグの終了文字 |
& | アンパサンド | & | エンティティ宣言の開始文字 |
" | ダブルクォート | " | HTML 属性値(href="...")脱出の防止 |
' | シングルクォート | ' または ' | シングルクォート属性値の脱出防止 |
3. JavaScript での実装コード例
① 正規表現による自作エスケープ関数
function escapeHtml(str) {
if (typeof str !== 'string') return str;
return str.replace(/[&<>"']/g, (match) => {
const escapeMap = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
};
return escapeMap[match];
});
}
console.log(escapeHtml('<script>alert("XSS")</script>'));
// "<script>alert("XSS")</script>"
4. 注意点(ハマりどころ)
- ダブルエスケープ(二重変換)
- 既に
<に変換された文字列を再度escapeHtml()に通すと&lt;になり、画面に<script>とそのまま文字として表示されてしまいます。
- 既に
- HTML 属性値のクォート囲み漏れ
<input value=ユーザー入力>のように属性値をクォートで囲まないと、スペース文字等で属性を脱出される危険があります。属性値は必ずvalue="..."のようにクォート囲みを徹底してください。