HTML Purifier做了什么安全的PHP编程无法做到的?

2022-08-30 19:14:13

我正在研究PHP安全最佳实践,特别是HTML Purifier库。

我喜欢使用第三方库来帮助加强我网站的安全性的想法,但我对一些事情感到困惑......

  1. 首先,一个一般性问题...HTML Purifier做了什么,练习安全的PHP编程不能?

  2. 如果我使用的是HTML净化器,这是否意味着我可以跳过常见的安全措施,例如使用PHP函数来过滤输入和转义输出?

  3. 对这个问题的一个响应注释似乎表明,HTML Purifier仅对允许HTML标记的元素(例如所见即所得编辑器)是必需的。这是正确的吗?

  4. 有没有人注意到使用HTML净化器的性能滞后?本文使性能影响看起来值得考虑。

  5. 是否有任何关于将HTML Purifier与非框架PHP应用程序集成的最新教程?我发现的所有内容要么是旧的,要么是特定于框架的

只是为了确认我在问这个问题之前已经完成了我的功课......

  • 这个问题基本上与我的问题相同,但唯一的回答似乎只是列出了提问者忘记提及的另一种最佳实践。

  • 这个“丰富”的问题是关于HTML Purifier和HTML5的一个很好的资源,但假设基础知识

  • HTML Purifier网站上的这个比较页面更像是与其他过滤器的比较。


答案 1

接受用户的任何输入时,有两个极端:

  1. 不加选择地将所有内容转义为HTML实体,因此用户无法注入任何内容。这是100%安全的,但不允许用户自由添加任何HTML,例如用于加粗文本等。
  2. 输出从用户处收到的内容。这允许用户<b>粗体文本</ b>,还可以有意或无意地以用户希望的任何其他形式注入脚本或弄乱HTML。

HTML净化器允许一个中间地带:允许用户注入一些HTML,但不是恶意HTML。当然,尝试这是一件混乱的事情,但HTML Purifier据称是为数不多的库之一,如果不是唯一的,可以做到这一点。

这是它应该用于的唯一用途。不要放弃其他安全措施。事实上,我会通过允许用户只使用受控的标记语言来设置其输入的样式,例如Markdown(Stackoverflow使用)来完全避免整个问题。


答案 2

推荐