以下是「data:」URI,將其加載到瀏覽器中。Chrome與Firefox Javascript行爲
data:text/html,<script>alert("#")</script>
我得到alert()在Chrome中執行,但在Firefox中沒有執行。 Firefox刪除「#」字符和所有以下字符。 我如何使FF提醒(「#」)?
更新:我瞭解「#」碎片部分,但問題更像是「爲什麼Chrome會忽略」碎片「情況,並將其視爲正常字符,而FF沒有?」。
以下是「data:」URI,將其加載到瀏覽器中。Chrome與Firefox Javascript行爲
data:text/html,<script>alert("#")</script>
我得到alert()在Chrome中執行,但在Firefox中沒有執行。 Firefox刪除「#」字符和所有以下字符。 我如何使FF提醒(「#」)?
更新:我瞭解「#」碎片部分,但問題更像是「爲什麼Chrome會忽略」碎片「情況,並將其視爲正常字符,而FF沒有?」。
數據URI的數據部分必須進行編碼,#
作爲文字字符是不允許的。來自Wikipedia page
數據,用逗號分開(
,
)。數據是以字符表示的八位字節序列。數據URI中的允許字符是現代英文字母的小寫字母和大寫字母的ASCII字符以及阿拉伯數字。用任何其他字符表示的八位字節必須進行百分比編碼,如%26
中的&符號(&
)。
...其中引用RFC3986。
所以你的數據URI應該是:
data:text/html,%3Cscript%3Ealert(%22%23%22)%3C%2Fscript%3E
...這在Chrome和Firefox的工作:
<a href="data:text/html,%3Cscript%3Ealert(%22%23%22)%3C%2Fscript%3E">Click here</a>
你可以使用JavaScript的的URI數據例如:
var dataUri = "data:text/html," + encodeURIComponent('<script>alert("#")</script>');
A #
在URL中具有特殊含義(表示片段部分的開始)。您必須將其編碼爲%23
以將其包含爲數據。