filter_var是一个好方法吗?

2022-08-30 12:05:53

对筛选数据有什么好处吗?它将过滤什么样的坏数据?我确实使用,但我想知道添加是否会有所帮助?filter_varmysql_real_escape_stringfilter_var


答案 1

为了防御SQL注入,如果可能的话,请使用预准备语句。如果不是,则对字符串使用 mysql_real_escape_string,对整数使用 (int) 强制转换或 intval(),对浮点数使用 (float) 或 floatval(),对在 LIKE 语句中使用的字符串使用 addcslashes($input,'%_')。当尝试转义字符串以在 RLIKE 语句中使用时,事情变得更加复杂。

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

$escaped = htmlspecialchars($input, ENT_QUOTES, $your_charset);

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

筛选器函数是可以的,但其中一些函数比筛选器更像验证器。根据您的需求,您可能会发现其中一些很有用。


答案 2

您可以通过将其与FILTER_*常量一起使用来进行调整。这听起来像是你正在寻找数据的清理(实际上调整数据以使其安全*),而不是验证(检查数据是否安全)。filter_var

不同的过滤器可以帮助完成不同的任务。虽然可以清理数据以防止SQL注入,但对于输出可能包含HTML的数据来说却没有好处。以下是我用于日常任务的几个过滤器:mysql_real_escape_string

  • FILTER_SANITIZE_SPECIAL_CHARS- 用于显示(不删除)HTML代码,防止XSS攻击以及将符号转换为HTML实体。
  • FILTER_SANITIZE_STRING使用标志 - 实际上删除了 HTML(请参阅)。STRIP_LOW/HIGHstrip_tags
  • FILTER_SANITIZE_URL- 使网址安全*。
  • FILTER_SANITIZE_EMAIL- 使电子邮件地址安全,尽管我更喜欢在存储地址之前使用它的验证表亲。

*我松散地使用保险箱,我认为你永远不会太确定。


推荐