ブラウザ内ツール
エスケープ変換
同じテキストでも、埋め込む先によって「危険な文字」は変わります。 HTML なら < > &、JSON なら " \、 URL なら空白や &、シェルなら空白や引用符。 入力したテキストを4つの文脈へ一括でエスケープ/アンエスケープし、 必要な形をその場でコピーできます。送信はしません。
ブラウザ内処理・送信なし
元のテキスト
HTML
<a href="/search?q=名前 & 値">it's a "test"</a>
< > & " ' を実体参照に。XSS対策で本文・属性値に埋める前の処理。
JSON文字列
<a href=\"/search?q=名前 & 値\">it's a \"test\"</a>
" \ 改行 タブ などを \" \n 等に。JSONの値に文字列を入れる形。
URL
%3Ca%20href%3D%22%2Fsearch%3Fq%3D%E5%90%8D%E5%89%8D%20%26%20%E5%80%A4%22%3Eit's%20a%20%22test%22%3C%2Fa%3E
encodeURIComponent 相当。クエリ文字列やパスに値を載せる前の処理。
シェル
'<a href="/search?q=名前 & 値">it'\''s a "test"</a>'
単一引用符で囲み POSIX シェルに安全に渡す形。空白や記号の事故を防ぐ。
どの文脈でエスケープするか
エスケープは「出力する直前に、その出力先に合わせて」行うのが原則です。 入力時にまとめてエスケープすると、HTML用の < がそのまま DB に保存され、 別の場所で二重エスケープになる、といった事故が起きます。
- HTML: ユーザー入力を画面に出す前に。これを怠るとXSS(スクリプト注入)の入口になる。属性値なら
"のエスケープも必須。 - JSON文字列: 文字列を手組みするとき。実務では
JSON.stringifyに任せるのが安全で、このツールはその結果を確認する用途。 - URL: クエリやパスに値を載せるとき。
& = ? 空白が構造を壊すのを防ぐ。 - シェル: コマンドに変数を渡すとき。単一引用符で囲むのが最も安全で、値の中の
'だけ特別扱いすればよい。