久々にお世話になります。
Chrome developer toolで値がエスケープされているか否かを確認する方法を御存知ですか?
他の方法でも構いませんが、なにか簡単に確認できたらと思いました。
"Element tab"で右クリックすると現れるメニュー内にある"Edit as HTML"では、引用符はエスケープされていない形で表示されているようでした。
以下のような質問にはグッドを送りましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 間違っている
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答3件
5
ベストアンサー
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総合スコア18056
1
Chrome developer toolで値がエスケープされているか否かを確認する方法を御存知ですか?
ブラウザで処理する前のデータを確認すると良いです。
具体的にいうと、ネットワーク → (確認したいリクエストを選択) → レスポンス で生のデータを確認できます。
投稿2020/11/03 11:05

退会済みユーザー
総合スコア0
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント

退会済みユーザー
2020/11/03 13:09
1
文字列がエスケープされているか
一応、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総合スコア5426
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
関連した質問
Q&A
解決済
Chrome拡張機能で表示するポップアップでマウスカーソルの位置表示、更新できない
回答1
クリップ1
更新
2023/01/24
Q&A
解決済
jsとgasによるdoPostとfetch間によるhtmlファイルの受け渡しについて
回答1
クリップ2
更新
2023/01/30
Q&A
解決済
PythonのSessionRequestへ渡すquery(json)のvalueの一部を変数で渡したいが実現できない
回答3
クリップ0
更新
2023/02/04
Q&A
解決済
axiosを用いたAPI呼び出しで"blocked by CORS policy"で呼び出し失敗
回答2
クリップ1
更新
2023/01/28
Q&A
解決済
Google ColaboratoryでChrome Devtools Protocolを使って、ウェブページのBase64形式のpdfデータを取得し、文字化け無くPDF化し保存したい
回答1
クリップ0
更新
2023/02/03
Q&A
解決済
GAS: insertImage()のエラーについて
回答1
クリップ0
更新
2022/12/24
Q&A
受付中
chromeで直接パスを入力してファイルを参照したい
回答2
クリップ1
更新
2023/02/01
Q&A
解決済
pyenvからpythonをアップデートするとエラーになる
回答3
クリップ0
更新
2022/12/17
同じタグがついた質問を見る
Security+は、IT業界団体であるCompTIA認定の資格の一つです。ネットワークセキュリティやコンプライアンスと運用セキュリティといったセキュリティ分野における知識・技術の証明になり、セキュリティインシデントに対応するための知識も評価されます。
Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。
エスケープ処理とは、一連の文字や一文字に対して、一定の規則に従って別の意味を適用する処理過程です。
JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。
文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
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