久々にお世話になります。
Chrome developer toolで値がエスケープされているか否かを確認する方法を御存知ですか?
他の方法でも構いませんが、なにか簡単に確認できたらと思いました。
"Element tab"で右クリックすると現れるメニュー内にある"Edit as HTML"では、引用符はエスケープされていない形で表示されているようでした。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
HTMLパース前の文字列
DOMになった時点でHTML文字実体参照などのHTMLエスケープのパース処理は既に終わっています。
HTMLパース前の文字列を得るには、Fetch APIで location.href
のbodyを取得して下さい。
XSS
質問のきっかけはXSS対応に必要なエスケープのことを調べていて、
それは質問文に書くべきだったと思います。
私を含めて皆さん、XSSの観点で回答していません。
JavaScriptに限定するなら、innerHTML, outerHTML, insertAdjacentHTML
でHTML断片文字列をドキュメントに挿入する際、「任意の文字列」がエスケープされていない事でXSSが発生します。
<p><foo> "bar"</p>
のように「<p>の内容」が「任意の文字列」なら、<> のエスケープが必要ですが、" はエスケープ不要です<p title="<foo> "bar"">
のように、「"で括られた属性値」に「任意の文字列」を挿入する場合は " もエスケープしなければなりません
質問文のHTMLは前者なので、" のエスケープは本来不要です。
また、次のようにHTML断片を挿入するAPIを使わずにDOMを変更した場合にはエスケープ処理そのものが不要な事も分かります、
JavaScript
1function sample (value) { 2 var p = document.createElement('p'); 3 p.title = p.textContent = value; 4 5 return p; 6} 7 8var p = sample('<foo> "bar"'); // 任意の文字列を渡す 9console.log(p.outerHTML); // <p title="<foo> "bar""><foo> "bar"</p>
Re: webiroha さん
投稿2020/11/01 02:38
編集2020/11/03 12:46総合スコア18189
0
Chrome developer toolで値がエスケープされているか否かを確認する方法を御存知ですか?
ブラウザで処理する前のデータを確認すると良いです。
具体的にいうと、ネットワーク → (確認したいリクエストを選択) → レスポンス で生のデータを確認できます。
投稿2020/11/03 11:05
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/11/03 13:09
2020/11/03 23:19
0
文字列がエスケープされているか
一応、JavaScriptが稼働する環境なら、文字列処理で確認できます。
javascript
1const isEscapedHTML = s => s.match(/&(#39|quot|gt|lt);|&(?!w+;)/) !== null; 2
CODEPEN escapeHTML() / unescapeHTML()
Chrome developer toolで
ツールに実装された機能についてのご質問であり、回答に困ります。
追記)
添付画像からは、以下のように感じました。
- 要素(タグ)はエスケープ
- テキストノードはそのまま
DOM は必ず Nodeオブジェクトの派生なので、そういう挙動なのだと思います。
投稿2020/11/03 02:36
編集2020/11/03 02:44総合スコア5434
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/03 00:07
2020/11/03 05:42
2020/11/03 05:45
2020/11/03 10:30
2020/11/03 12:46
2020/11/03 23:15