filter_var是一个很好的方法吗?

mik*_*ing 39 php security

filter_var什么好用于过滤数据?它会过滤哪种不良数据?我确实使用,mysql_real_escape_string但我想知道添加filter_var是否有帮助?

Ion*_*tan 25

为了防止SQL注入,尽可能使用预处理语句.如果不是,请将mysql_real_escape_string用于字符串,将(int)cast或intval()用于整数,(float)或floatval()用于浮点数,并使用addcslashes($ input,'%_')用于LIKE语句中使用的字符串.当尝试转义要在RLIKE语句中使用的字符串时,事情变得更加复杂.

对于过滤HTML内容,最好的是strip_tags(不传递$ allowable_tags),但是......你可能不喜欢/想要它,在这种情况下最经济实惠的解决方案是:

$escaped = htmlspecialchars($input, ENT_QUOTES, $your_charset);
Run Code Online (Sandbox Code Playgroud)

更可靠的解决方案是使用像HTML Purifier这样的库

过滤器功能没问题,但其中一些比过滤器更有效.根据您的需要,您可能会发现其中一些有用.

  • htmlspecialchars()是将文本输出到HTML的正确方法.如果您想在文本中使用合法的"<"字符,strip_tags()会丢失内容,并且不会正确显示"&". (5认同)

Ros*_*oss 18

您可以filter_var使用FILTER_*常量进行调整.听起来你正在寻找数据的卫生处理(实际调整数据以使其安全*)而不是验证(检查数据是安全的).

不同的过滤器可以帮助完成不同的任 虽然mysql_real_escape_string可以清理数据以防止SQL注入,但输出可能包含HTML的数据并不好.这是我用于日常任务的几个过滤器:

  • FILTER_SANITIZE_SPECIAL_CHARS - 用于显示(不删除)HTML代码,防止XSS攻击并将符号转换为HTML实体.
  • FILTER_SANITIZE_STRING带有STRIP_LOW/HIGH标志 - 实际上删除了HTML(请参阅参考资料strip_tags).
  • FILTER_SANITIZE_URL - 使URL安全*.
  • FILTER_SANITIZE_EMAIL - 使电子邮件地址安全,虽然我更喜欢在存储地址之前使用它的验证表.

*我松散地使用安全,我认为你永远不会太确定.