teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コメントに対する回答を追記しました

2019/09/29 00:42

投稿

ockeghem
ockeghem

スコア11710

answer CHANGED
@@ -24,4 +24,13 @@
24
24
 
25
25
  - script要素内のデータには「</script」という文字の並びは出現しないようにプログラマが責任を持たなければならない
26
26
 
27
- ということです。サンプルの脆弱なスクリプトはこの処理が入っていないことが脆弱性の原因です。
27
+ ということです。サンプルの脆弱なスクリプトはこの処理が入っていないことが脆弱性の原因です。
28
+
29
+ ---
30
+
31
+ > すみません。確認の為、追加でお聞きしたい箇所があるのですが、<script>要素内ではタグは解釈されないが、特別に</script>は認識されてしまうため、</script>が出現しないようにプログラマが気をつけなければならないといった理解で合っていますでしょうか...?
32
+ また、</script>がタグとして解釈されてしまうのは、javascriptの仕様なのでしょうか?
33
+
34
+ 違います。
35
+ 「タグが解釈されない」というのは、&lt; などが文字実体参照とてではなく、文字通りに扱われるという意味です。あるいは、<BR>という改行タグがあっても、改行という意味ではなく「<BR>」という文字列として扱われるという意味です。
36
+ そもそもの問題として、<script>要素は、</script>までで終わるわけです。これは正常な場合でもそうですよね。なので、ブラウザは、<script>要素が始まったら、</script>という文字列を探し、これらのタグに囲まれた範囲をJavaScriptの処理系に渡すわけです。タグの解釈をしないというのは、前述のように<BR>を改行と解釈しない等のことであって、</script>でscriptタグの終わりであることは識別しないことには、どこまでがscript要素かわからなくなります。

1

typoを修正しました

2019/09/29 00:42

投稿

ockeghem
ockeghem

スコア11710

answer CHANGED
@@ -18,10 +18,10 @@
18
18
 
19
19
  ここで、「script要素内のデータには「</script」という文字の並びは出現できないことになっている」ですが、これはあくまで文法上の約束なので、
20
20
 
21
- - リストscript要素内のデータには「</script」という文字の並びは出現しないことが保証されている
21
+ - script要素内のデータには「</script」という文字の並びは出現しないことが保証されている
22
22
 
23
23
  ではなく
24
24
 
25
- - リストscript要素内のデータには「</script」という文字の並びは出現しないようにプログラマが責任を持たなければならない
25
+ - script要素内のデータには「</script」という文字の並びは出現しないようにプログラマが責任を持たなければならない
26
26
 
27
27
  ということです。サンプルの脆弱なスクリプトはこの処理が入っていないことが脆弱性の原因です。