【问题标题】:What is difference between FILTER_SANITIZE_FULL_SPECIAL_CHARS and htmlspecialchars?FILTER_SANITIZE_FULL_SPECIAL_CHARS 和 htmlspecialchars 有什么区别?
【发布时间】:2016-02-16 10:09:00
【问题描述】:

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

【问题讨论】:

  • 这个只和html输出有关。要安全地插入数据库,您应该使用准备好的语句。然后您不必单独清理/编码您的数据。
  • @jeroen 哦,谢谢已经在使用它,所以你的意思是这些功能只适用于浏览器?如果 m 不使用准备好的语句,使用这些函数将无助于清理要存储在 db 中的数据?
  • 没错,这对数据库没有任何作用。

标签: php filter htmlspecialchars


【解决方案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 不共享)对 SQL 查询使用 HTML 转义方法将 不保护你。那些元字符将通过 htmlspecialchars 毫发无损,因此能够导致 SQL 注入。

反之亦然,如果您使用 SQL 转义方法进行转义 输出到浏览器。它不会逃脱 标志, 这意味着攻击者可以轻松执行 HTML 注入攻击(XSS ETC)。不仅如此,你还会突然出现很多斜线 不应该有的地方。充其量,这很烦人。

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

【讨论】:

  • 抱歉,问题是关于FILTER_SANITIZE_FULL_SPECIAL_CHARS,而不是FILTER_SANITIZE_SPECIAL_CHARS
【解决方案2】:

根据官方 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

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

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    • 2013-08-19
    相关资源
    最近更新 更多