FILTER_SANITIZE_FULL_SPECIAL_CHARS和htmlspecialchars有什么区别?

时间:2016-02-16 10:09:01

标签: php filter htmlspecialchars

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

2 个答案:

答案 0 :(得分:1)

从此:http://forums.phpfreaks.com/topic/275315-htmlspecialchars-vs-filter-sanitize-special-chars/

  

它们非常相似,但正如PHP手册所述   htmlspecialchars逃脱的不仅仅是   FILTER_SANITIZE_SPECIAL_CHARS。

     

这将我们带到下一点,SQL注入预防。就像声明的那样   htmlspecialchars用于将输出转义为HTML解析器,而不是   数据库引擎。数据库引擎不了解HTML,也没有   关心它。它的作用是SQL查询。 SQL   查询和HTML使用完全不同的元字符,只有少数几个   共同点:行情是最明显的,甚至有点   有条件的HTML。但是,由于其他元字符(其中   HTML不会共享)使用HTML转义方法进行SQL查询   不保护你。那些元字符将会通过   htmlspecialchars unscathed,因此能够导致SQL注入。

     

相反,如果您使用SQL转义方法来转义   输出到浏览器。它不会逃脱<和>迹象,   意味着攻击者可以轻松执行HTML注入攻击(XSS   等等)。不仅如此,你还会突然有很多深渊   不应该有的地方。这充其量是令人烦恼的。

     

这就是了解和使用正确方法的原因   您要发送数据的第三方系统。如果你不这样做,你   仍然很脆弱

答案 1 :(得分:0)

根据官方 PHP 文档,htmlspecialchars()FILTER_SANITIZE_FULL_SPECIAL_CHARS 应该是等价的:

<块引用>

相当于调用带有 ENT_QUOTES 集的 htmlspecialchars()。可以通过设置 FILTER_FLAG_NO_ENCODE_QUOTES 来禁用编码引号。与 htmlspecialchars() 一样,此过滤器知道 default_charset,如果检测到构成当前字符集中无效字符的字节序列,则拒绝整个字符串,从而导致长度为 0 的字符串。将此过滤器用作默认过滤器时,请参阅下面有关将默认标志设置为 0 的警告。

取自这里 - https://www.php.net/manual/en/filter.filters.sanitize.php

从这里开始,我认为您更喜欢哪种功能取决于个人喜好。