Php 过滤器\消毒\完全\特殊\字符和htmlspecialchars之间的区别是什么?

Php 过滤器\消毒\完全\特殊\字符和htmlspecialchars之间的区别是什么?,php,filter,htmlspecialchars,Php,Filter,Htmlspecialchars,我有一个文本区,用户可以将其作为评论框使用,因此任何类型的输入都是可以接受的,但应该只作为文本而不是代码接受。基本上我想保护我的数据库。我不想去掉标签之类的东西,我只想知道,如果有任何用户甚至输入了一个代码,该代码应该作为文本存储在数据库中,并且不应该对数据库造成任何伤害。因此,我遇到了这两个php函数,现在我不确定应该使用其中哪一个,因为我无法理解它们之间的区别。由此: 它们非常相似,但正如PHP手册所述 htmlspecialchars逃逸的不仅仅是 过滤\消毒\特殊\字符 这就引出了下一点

我有一个文本区,用户可以将其作为评论框使用,因此任何类型的输入都是可以接受的,但应该只作为文本而不是代码接受。基本上我想保护我的数据库。我不想去掉标签之类的东西,我只想知道,如果有任何用户甚至输入了一个代码,该代码应该作为文本存储在数据库中,并且不应该对数据库造成任何伤害。因此,我遇到了这两个
php
函数,现在我不确定应该使用其中哪一个,因为我无法理解它们之间的区别。

由此:

它们非常相似,但正如PHP手册所述 htmlspecialchars逃逸的不仅仅是 过滤\消毒\特殊\字符

这就引出了下一点,SQL注入预防。如上所述 htmlspecialchars用于将输出转义到HTML解析器,而不是 数据库引擎。DB引擎不理解HTML,也不理解HTML 我也不在乎。它真正理解的是SQL查询。SQL 查询和HTML使用完全不同的元字符,只有少数几个 共同点:引用是最明显的,甚至有点 对于HTML来说是有条件的。但是,由于其他元字符( HTML不共享)使用SQL查询的HTML转义方法将 不保护你。这些元字符将通过 htmlspecialchars不会受损,因此能够导致SQL注入

如果使用SQL转义方法进行转义,则情况也是如此 输出到浏览器。它无法逃脱<和>标志, 这意味着攻击者可以轻松执行HTML注入攻击(XSS) 等等)。不仅如此,而且你会突然有很多刀砍 不应该有任何的地方。充其量也很烦人

这就是为什么知道并使用正确的方法来解决问题是如此重要 将数据发送到的第三方系统。如果你不这样做,你 他们仍然脆弱


根据官方PHP文档,
htmlspecialchars()
FILTER\u SANITIZE\u FULL\u SPECIAL\u CHARS
应该是等效的:

相当于使用ENT_引号集调用htmlspecialchars()。可以通过设置过滤器\标志\否\编码\引号来禁用编码引号。与htmlspecialchars()类似,此筛选器知道默认的_字符集,如果检测到构成当前字符集中无效字符的字节序列,则整个字符串将被拒绝,从而生成长度为0的字符串。将此筛选器用作默认筛选器时,请参阅下面关于将默认标志设置为0的警告

从这里取-


从这里开始,我认为您更喜欢哪个函数是个人偏好的问题。

这只与html输出有关。要在数据库中安全插入,应使用准备好的语句。那么你就不必单独清理/编码你的数据了。@jeroen哦,谢谢你已经在使用它了,那么你的意思是这些功能只是针对浏览器的?如果我不使用预先准备好的语句,使用这些函数将无助于清理存储在数据库中的数据?确切地说,这对数据库没有任何作用。对不起,问题是关于
FILTER\u SANITIZE\u FULL\u SPECIAL\u CHARS
,而不是
FILTER\u SANITIZE\u SPECIAL\u CHARS