📜  如何使用PHP验证和清理用户输入?

📅  最后修改于: 2022-05-13 01:56:44.612000             🧑  作者: Mango

如何使用PHP验证和清理用户输入?

数据验证是 Web 开发不可或缺的一部分,尤其是在使用表单时,用户首先输入他们的个人数据,然后将其发送到数据库。以无效格式发送的数据可能会导致 DBMS 安全问题。黑客经常使用 SQL 注入将恶意 SQL 命令插入数据库。 SQL 注入甚至可以在插入后破坏数据库。因此,为了保护数据库免受黑客攻击,有必要在将用户输入的数据发送到数据库之前对其进行清理和过滤。

让我们举一个 SQL 注入的例子来说明问题。

假设黑客在“用户名”输入框中输入“5=5”,然后提交数据。条件“5=5”始终为真。因此,按下“提交”按钮后将执行的 SQL 命令将是

SELECT * FROM registration WHERE UserId = 105 OR 1=1;

上面的 SQL 命令是没有错误的,因此 MySQL 服务器会执行它。但是,如果注册表包含信用卡信息或密码等敏感信息怎么办。黑客可能会通过在用户名输入框中输入“5=5”来获取所有注册用户的信息,然后对其进行滥用。

为防止此类情况发生,需要对用户数据进行验证和清理:
filter_var函数用于此目的。这个函数一般有两个参数。首先是需要验证的变量,其次是我们要对该变量进行的检查类型。

让我们看看一些检查类型及其示例:

  1. 字符串清理 - FILTER_SANITIZE_STRING:这会从字符串中删除所有 HTML 标记。这将清理输入字符串,并阻止任何 HTML 标记进入数据库。
    GeeksforGeeks Portal";
    $newgeeks = filter_var($geeks, FILTER_SANITIZE_STRING);
    echo $newgeeks;
    ?>
    

    输出:

    GeeksforGeeks Portal

    代码说明:
    上面示例中的“geeks 变量存储标题“GeeksforGeeks Portal”。然后使用FILTER_SANITIZE_STRING过滤这个“极客”变量。然后将过滤后的字符串存储在“newgeeks”变量中。回显后,输出结果为“GeeksforGeeks Portal”。这是因为原始字符串中没有 HTML 标记,因此无需过滤。

  2. IP 地址验证 – FILTER_VALIDATE_IP:此过滤器检查 IP 地址是否有效。
    
    

    输出:

    Valid IP-address

    代码说明:
    发现存储在 $ipaddr 变量中的 IP 地址是有效的。如果“126.2.5”存储在 $ipaddr 变量中,那么输出将是“无效 IP 地址”。这是因为它不遵循为 IP 地址设计的协议。

  3. Integer Sanitization – FILTER_VALIDATE_INT:此过滤器检查变量是否为整数。
    
    

    输出:

    Valid

    代码说明:
    如果 $num 是一个有效的整数,代码将输出“Valid”,否则,输出将是“Invalid”。在这里,500 是一个整数,这就是输出结果为“有效”的原因。

  4. 电子邮件 ID 验证 – FILTER_SANITIZE_EMAIL 和 FILTER_VALIDATE_EMAIL:此过滤器首先从电子邮件中删除所有非法字符,然后检查格式是否有效。
    
    

    输出:

    career@geeksforgeeks.com is valid

    代码说明:
    首先,对 $em 变量中存储的电子邮件进行清理,以删除任何非法字符,如 '/><)*&^' 等。清理后,验证电子邮件,检查输入的电子邮件是否为有效格式.

  5. URL 验证 – FILTER_SANITIZE_URL:与电子邮件过滤器一样,此过滤器也首先从 URL 中删除所有非法字符,然后检查格式是否有效。
    
    

    输出:

    https://www.geeksforgeeks.com is valid

    代码说明:
    存储在 $url 变量中的电子邮件首先被清理以删除非法字符。之后,检查 URL 以确定 URL 格式是否有效。