何时使用htmlspecialchars()函数?

30

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

4个回答

35

只有在将数据呈现为HTML时才应该调用此方法。

不要将转义后的HTML存储在数据库中;这只会使查询变得更加麻烦。
数据库应该存储您的实际数据,而不是其HTML表示。


谢谢。但是当我尝试将PHP标签 "<?php 和 ?>" 存储到数据库中时,除非我事先使用htmlspecialchars()函数,否则我无法实现这一点。 - khr2003
3
@khr2003 不要将 PHP 存储在数据库中,这从来都不是一个好主意。 - user557846
1
我同意,但它们将成为插入帖子时的bbcode的一部分。 - khr2003
我不明白为什么你的bb代码中需要php ;) 但如果你想存储它,那么在将值存储到数据库之前应该对其使用htmlentities()。 - Vamsi Krishna B

21
您在 HTML 中输出内容时,每次都需要使用 htmlspecialchars,以使其被解释为内容而非 HTML。
如果允许内容被视为 HTML,则至少会引入错误漏洞,最糟糕的情况下可能会导致完全的 XSS 攻击。

4

将用户输入的内容保存到数据库中。 然后在向公众展示时,使用htmlspecialchars()函数,以提供一定的XSS保护。


但他在问为什么要这样做?你的回答中没有提供理由。请考虑编辑它。 - Pratik Joshi

2

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

首先,您需要理解一个简单的概念:渲染。

什么是渲染? 渲染是指HTML转换的过程。

<b>Hello</b>

要加粗文字,可以这样写:Hello。这是渲染效果。

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

无论何时需要呈现HTML内容时都要使用该函数。例如,如果您正在使用JQuery,并且执行以下操作:

$("#YourDiv").html("<b>Hello</b>");
内容将会是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,请原样保存。不要过滤任何内容。只有在将数据显示给用户时才需要过滤。您自己决定是否要呈现用户编写的内容。*请记住这一点。

问候!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接