我有一个textarea,用户可以将其作为评论框使用,因此任何类型的输入都是可以接受的,但只能作为文本而不是代码接受。基本上我想保护我的数据库。我不想剥离标签或类似的东西,我只是想要,如果任何用户甚至输入应该作为文本存储在数据库中的代码,并且不应该对数据库造成任何伤害。现在我遇到了这两个php
函数,我不确定应该使用哪一个函数,因为我无法理解它们之间的区别。
答案 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
从这里开始,我认为您更喜欢哪种功能取决于个人喜好。