是否应该在 PHP 中净化所有输出?
Should all output be purified in PHP?
我正在 PHP 中创建一个相当小的 Web 应用程序,(受信任的)管理员可以在其中将数百个对象存储在数据库中。用户可以以文本字段的形式输入有关这些对象的一些详细信息(类型属性设置为 "text" 的输入元素)。
对象及其详细信息以 table 的形式回显,由 htmlspecialchars
函数转义。但是,此功能并不能防止恶意使用 html 标签,例如 <script>
标签。
问题是是否所有用户输入的数据(table 中的每个单元格)都应该被 HTMLPurifier 之类的东西净化,它已经在应用程序的其他地方使用过。如果是这样,最好的方法是什么,因为使用 HTMLPurifier 数千次,因为有很多细节,可能会导致一些严重的性能问题。
在将其保存到数据库之前,应检查并清理所有内容。原则是你不相信任何来自用户的东西。
总是逃避一切。
或者只使用可以为您做到这一点的工具 - 例如框架。
The objects with their details are echoed in the form of a table, escaped by the htmlspecialchars function. This function, however, does not prevent against the malicious use of html tags, for example, the <script>
tag.
是的。它们无害且正确地输出为 <script>
.
The question is whether all user entered data (every cell in the table) should be purified by something like HTMLPurifier
没有。您应该只在您故意允许用户输入标记以直接呈现到页面的字段上使用 HTMLPurifier,例如用户可以键入 <i>
以显示斜体的评论系统。
对于您视为纯文本的其他输入,htmlspecialchars
在输出到 HTML 时仍然是正确的做法。
我正在 PHP 中创建一个相当小的 Web 应用程序,(受信任的)管理员可以在其中将数百个对象存储在数据库中。用户可以以文本字段的形式输入有关这些对象的一些详细信息(类型属性设置为 "text" 的输入元素)。
对象及其详细信息以 table 的形式回显,由 htmlspecialchars
函数转义。但是,此功能并不能防止恶意使用 html 标签,例如 <script>
标签。
问题是是否所有用户输入的数据(table 中的每个单元格)都应该被 HTMLPurifier 之类的东西净化,它已经在应用程序的其他地方使用过。如果是这样,最好的方法是什么,因为使用 HTMLPurifier 数千次,因为有很多细节,可能会导致一些严重的性能问题。
在将其保存到数据库之前,应检查并清理所有内容。原则是你不相信任何来自用户的东西。
总是逃避一切。
或者只使用可以为您做到这一点的工具 - 例如框架。
The objects with their details are echoed in the form of a table, escaped by the htmlspecialchars function. This function, however, does not prevent against the malicious use of html tags, for example, the
<script>
tag.
是的。它们无害且正确地输出为 <script>
.
The question is whether all user entered data (every cell in the table) should be purified by something like HTMLPurifier
没有。您应该只在您故意允许用户输入标记以直接呈现到页面的字段上使用 HTMLPurifier,例如用户可以键入 <i>
以显示斜体的评论系统。
对于您视为纯文本的其他输入,htmlspecialchars
在输出到 HTML 时仍然是正确的做法。