2017-01-04 19 views
1

ここには「data:」URIがあり、これをブラウザに読み込みます。ChromeとFirefoxのJavaScriptの動作

data:text/html,<script>alert("#")</script> 

Chromeでは警告が表示されますが、Firefoxでは表示されません。 Firefoxは "#"文字と次のすべての文字を削除します。 FFにアラート( "#")を付けるにはどうしたらいいですか?

更新:私は "#"フラグメントの部分を理解していますが、 "FFはしなかったときにクロムが"フラグメント "の大文字小文字を無視して通常の文字と見なすのはなぜですか?

答えて

2

リテラル文字が許可されていないため、データURIのデータ部分を符号化する必要があります(#)。 Wikipedia page

データは、前の部分とカンマ(,)で区切られています。データは、文字として表現されたオクテットのシーケンスです。データURI内の許可される文字は、現代英語アルファベットの小文字と大文字のASCII文字、およびアラビア数字です。他の文字で表されるオクテットは、アンパサンドの場合は%26&)のように、パーセントエンコードされている必要があります。

...は、RFC3986を引用しています。 ChromeとFirefoxの両方で動作

data:text/html,%3Cscript%3Ealert(%22%23%22)%3C%2Fscript%3E 

...:

だからあなたのデータURIがどうあるべき

<a href="data:text/html,%3Cscript%3Ealert(%22%23%22)%3C%2Fscript%3E">Click here</a>

あなたがJavaScriptの者を使用してURIデータを取得することができますencodeURIComponent、例:

var dataUri = "data:text/html," + encodeURIComponent('<script>alert("#")</script>'); 
1

#はURLに特別な意味を持ちます(フラグメント部分の開始を示します)。それをデータとして含めるには、%23としてエンコードする必要があります。

関連する問題