28

嗨,我想知道什么时候使用 htmlspecialchars() 合适。是在将数据插入数据库之前还是从数据库中检索它们时?

4

4 回答 4

33

您应该只在将数据回显到 HTML 时调用此方法。

不要在数据库中存储转义的 HTML;它只会使查询更烦人。
数据库应该存储您的实际数据,而不是它的 HTML 表示。

于 2011-02-03T03:14:31.287 回答
19

htmlspecialchars 每次在 HTML 中输出内容时都会使用它,因此它是作为内容而不是 HTML 进行处理的。

如果您允许将内容视为 HTML,那么您至少打开了漏洞之门,最坏的情况是总的 XSS 黑客攻击。

于 2011-02-03T03:15:31.013 回答
4

保存用户输入数据库的确切内容。然后在向公众展示时,使用htmlspecialchars(), 以便它提供一些 xss 保护。

于 2011-02-03T03:20:34.287 回答
2

指南 - 如何在 PHP 中使用 htmlspecialchars() 函数

首先,您必须了解 1 个简单的概念:渲染。

什么是渲染? 渲染是 HTML 转换的时候

<b>Hello</b>

像这样加粗你好。那就是渲染。

那么...何时使用 htmlspecialchars() 函数?

无论您想在哪里呈现 HTML 内容。例如,如果您正在使用 JQuery 并且您执行以下操作:

$("#YourDiv").html("<b>Hello</b>");

div 内容将为Hello。它将文本呈现为 HTML。

如果您想以这种方式显示消息(由用户编写):

<b>Hello</b>

你必须把:

$("#YourDiv").text("<b>Hello</b>");

这样,Hello 将永远不会被渲染。

如果您想将消息(如用户所写)加载到文本框、文本区域等中...您必须输​​入:

<input type="text" class="Texbox1" value="">

<script>
$(".Textbox1").val("<b>Hello</b>");
</script>

那将显示

 <b>Hello</b>

在文本框内没有问题。

结论:

用户在您的表单中输入了什么数据,等等......像往常一样保存数据。不要使用任何功能。如果用户发送了 12345,请按原样保存。不要过滤任何东西。您只需在要将页面中的数据显示给用户时进行过滤。你,只有你决定是否要渲染用户写的内容。*记住这一点。

问候!

于 2017-09-09T04:53:07.393 回答