如果您未能正确对数据应用 PHP 过滤(清理和验证),则可能会出现安全问题。考虑并不总是来自安全来源的外部数据尤为重要。

来自代码外部的所有数据都应始终进行验证和清理,以防止数据插入和其他与用户输入相关的安全风险。外部数据也来自服务器和数据库。

PHP 过滤通过删除所有非法字符来清理数据。此外,它可以验证数据,检查信息是否采用正确的形式。

内容

PHP 过滤:主要提示

  • PHP 包括内置的过滤器功能,允许验证或清理您通过表单或其他方式输入的数据。

  • 如果要在不触发代码的情况下使用特殊字符作为文本,从而防止数据插入,这将非常有用。

  • 验证数据意味着确定数据的形式是否正确。

  • 清理数据意味着从数据中删除任何特殊字符。

使用 filter_lists()

要查看 PHP 过滤器提供的功能,请使用下面的代码示例中所示的函数:filter_lists()

例复制

<ul>  <?php     foreach (filter_list() as $id => $filter) {      
      echo '<li>' . $filter . ', ' . filter_id($filter) . '</li>';  
    }  ?></ul>

filter_var() 函数说明

验证和清理数据的函数称为 。初始化时需要两个变量。第一个参数指示要清理的变量。第二个指定要使用的筛选器。filter_var()

清理数据的原因

Web 应用程序中的外部输入有许多用途:

  • 来自表单的用户定义输入。

  • 饼干数据。

  • 网络服务数据。

  • 服务器变量数据。

  • 数据库查询的结果。

进行过滤器输入

现在,我们将使用代码示例来解释如何在各种类型的外部数据上使用PHP过滤。让我们一步一步地回顾它们。

字符串和整数

下面的示例显示了如何使用 PHP 过滤器清理字符串:filter_var()

例复制

<?php
  $str = "<h1>Hey!</h1>";
  $newstring = filter_var($str, FILTER_SANITIZE_STRING);  echo $newstring;?>


下面的代码示例说明了如何使用来检查变量是否为整数,以及根据结果显示消息:filter_var()

例复制

<?php
  $int = 87;  if (!filter_var($int, FILTER_VALIDATE_INT) ===  false) {    
    echo "This is an integer.";
  } else {    
    echo "This is not an integer. Or at least not a valid one. Read more about that.";
  }?>

不过,这里可能会出现一个小问题。如果值等于 0(即使变量是整数),将返回 。使用此代码来解决此问题:filter_var()false

例复制

<?php
  $int = 0;  if (filter_var($int, FILTER_VALIDATE_INT) === 0 || !filter_var($int, FILTER_VALIDATE_INT) ===  false) {    echo "This is an integer.";
  } else {    echo "This is DEFINiTELY not an integer";
  }?>

IP 地址、电子邮件和网址

仔细查看提供的代码片段。在其中,我们用于检查变量是否是有效的 IP 地址。您可以在代码中看到两种可能的响应。将显示哪一个,取决于验证结果:filter_var()

例复制

<?php
  $ip = "127.0.0.1";  if (!filter_var($ip, FILTER_VALIDATE_IP) === false) {    echo "Pretty sure that $ip indeed is working, valid IP address.";
  } else {    
    echo "$ip ? Nope. NOT a valid IP address, I can tell you that much.";
  }?>


现在,在下一个示例中,PHP 再次用于验证和清理,但这次对象是 URL 地址。看一看:fi

现在,在下一个示例中,PHP 再次用于验证和清理,但这次对象是 URL 地址。看一看:filter_var()

例复制

<?php
  $url = "https://www.bitdegree.org/learn/";  	
  // Remove all illegal characters from a url
  $url = filter_var($url, FILTER_SANITIZE_URL);  // Validate url
  if (!filter_var($url, FILTER_VALIDATE_URL) ===  false) {    echo "$url is TOTALLY legit. Really, it's a valid URL.";
  } else {     echo "$url is DEFINITLELY not a valid, working URL";
  }?>

PHP 过滤:摘要

  • 内置的 PHP 过滤功能可让您轻松验证和清理您输入或用户输入的数据。

  • 验证意味着查找相关数据的格式是否正确。

  • 清理会删除数据可能包含的所有特殊字符。通过让 PHP 清理表单数据,您可以确保只获得预期的输入。