我想知道什么时候是合适的地方使用
htmlspecialchars()
。是在将数据插入数据库之前还是从数据库检索数据时?
您应该仅在将数据回显为 HTML 时调用此方法。
不要将转义的 HTML 存储在数据库中;它只会让查询变得更烦人。
数据库应该存储您的实际数据,而不是其 HTML 表示形式。
在 HTML 中输出内容时,您会使用
htmlspecialchars
EVERY,因此它会被解释为内容而不是 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 则按原样保存。不要过滤任何东西。仅当您要向用户显示页面中的数据时才需要进行过滤。您,只有您决定是否要渲染用户编写的内容。 *记住这一点。
问候!