这是“data:”URI,在浏览器中加载它。
data:text/html,<script>alert("#")</script>
我在Chrome中执行alert(),但在Firefox中没有。 Firefox删除“#”字符和以下所有字符。 如何让FF提醒(“#”)?
更新:我理解“#”片段部分,但问题更像是“为什么Chrome会忽略”片段“的情况并将其视为普通字符,当FF没有?”。
答案 0 :(得分:2)
必须对数据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 encodeURIComponent
获取URI数据,例如:
var dataUri = "data:text/html," + encodeURIComponent('<script>alert("#")</script>');
答案 1 :(得分:1)
#
在URL中具有特殊含义(它表示片段部分的开头)。您必须将其编码为%23
以将其包含为数据。