嗨,我想知道什么时候使用 htmlspecialchars() 合适。是在将数据插入数据库之前还是从数据库中检索它们时?
4 回答
您应该只在将数据回显到 HTML 时调用此方法。
不要在数据库中存储转义的 HTML;它只会使查询更烦人。
数据库应该存储您的实际数据,而不是它的 HTML 表示。
您htmlspecialchars
每次在 HTML 中输出内容时都会使用它,因此它是作为内容而不是 HTML 进行处理的。
如果您允许将内容视为 HTML,那么您至少打开了漏洞之门,最坏的情况是总的 XSS 黑客攻击。
保存用户输入数据库的确切内容。然后在向公众展示时,使用htmlspecialchars()
, 以便它提供一些 xss 保护。
指南 - 如何在 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,请按原样保存。不要过滤任何东西。您只需在要将页面中的数据显示给用户时进行过滤。你,只有你决定是否要渲染用户写的内容。*记住这一点。
问候!