在PHP中,有一种叫做htmlspecialchars()函数上的字符串执行以下替换:为什么这些5(6?)字符被认为是“不安全的”HTML字符?
&
(符号)转换为&
"
(双引号)被转换为"
'
(单引号)转换为'
(仅当设置了标志ENT_QUOTES时)<
(小于)转换为<
>
(大于)被转换为>
显然,这是在完成的理由是,这些具体的5个字符是不安全HTML字符。
我可以理解为什么最后两个被认为是不安全的:如果他们只是“回声”,任意/危险的HTML可以交付,包括潜在的JavaScript与<script>
和所有。
问题1.为什么前三个字符(和号,双引号,单引号)也被认为是“不安全”?
另外,我偶然发现this library called "he" on GitHub (by Mathias Bynens),这是一个关于编码/解码HTML实体。在那里,我发现了以下内容:
[...]字符是不安全的HTML内容中使用(&,<,>,”,”和`)将被编码[...]
(source)
问题2:是否有一个很好的理由,考虑到反引号另一个不安全的HTML字符?如果是的话,这是否意味着上述PHP的功能已经过时了?
最后,这一切引出了一个问题:
问题3.是否存在应被视为“不安全”的任何其他字符,沿着上面提到的5/6字符?
这并没有真正回答你的问题,但确实对#3有所说:在筛选XSS漏洞等时使用白名单,而不是黑名单。如果您必须允许HTML使其成为一个非常有限的子集。试图筛选出每一个可能的不好的条目比只允许好的条目困难得多。 – CollinD
@CollinD谢谢 - 我同意简单地转义那些5(6)个字符并不是防止漏洞的最好方法。我的问题更多的是关于为什么这5个角色被认为比其他角色“更重要”,以及是否有其他角色应该放在同一个包里,比如倒勾。 – Hamsterrific
现在,任何人都愿意猜测这个问题出了什么问题?我收到了一个没有解释的随机downvote。我期待着改进/解决问题,但如果没有评论,我不能这样做。谢谢。 – Hamsterrific