在 PHP 中,有一个名为htmlspecialchars()的函数,它对字符串执行以下替换:
&
(和号)转换为&
"
(双引号)转换为"
'
(单引号)转换为'
(仅当设置了标志 ENT_QUOTES 时)<
(小于)转换为<
>
(大于)转换为>
显然,这是因为这 5 个特定字符是不安全的 HTML 字符。
我可以理解为什么最后两个被认为是不安全的:如果它们只是“回显”,则可以传递任意/危险的 HTML,包括潜在的 javascript<script>
等等。
问题 1. 为什么前三个字符(和号、双引号、单引号)也被认为是“不安全的”?
另外,我在 GitHub 上偶然发现了这个名为“he”的库(由 Mathias Bynens 编写),它是关于编码/解码 HTML 实体的。在那里,我发现了以下内容:
[...] 在 HTML 内容中使用不安全的字符(&、<、>、"、' 和 `)将被编码。[...]
(来源)
问题 2. 是否有充分的理由将反引号视为另一个不安全的 HTML 字符?如果是,这是否意味着上述 PHP 的功能已经过时了?
最后,所有这些都引出了一个问题:
问题 3. 除了上面提到的 5/6 字符之外,还有其他应该被视为“不安全”的字符吗?