如何使用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
函数用于此目的。这个函数一般有两个参数。首先是需要验证的变量,其次是我们要对该变量进行的检查类型。
让我们看看一些检查类型及其示例:
- 字符串清理 - 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 标记,因此无需过滤。 - IP 地址验证 – FILTER_VALIDATE_IP:此过滤器检查 IP 地址是否有效。
输出:
Valid IP-address
代码说明:
发现存储在 $ipaddr 变量中的 IP 地址是有效的。如果“126.2.5”存储在 $ipaddr 变量中,那么输出将是“无效 IP 地址”。这是因为它不遵循为 IP 地址设计的协议。 - Integer Sanitization – FILTER_VALIDATE_INT:此过滤器检查变量是否为整数。
输出:
Valid
代码说明:
如果 $num 是一个有效的整数,代码将输出“Valid”,否则,输出将是“Invalid”。在这里,500 是一个整数,这就是输出结果为“有效”的原因。 - 电子邮件 ID 验证 – FILTER_SANITIZE_EMAIL 和 FILTER_VALIDATE_EMAIL:此过滤器首先从电子邮件中删除所有非法字符,然后检查格式是否有效。
输出:
career@geeksforgeeks.com is valid
代码说明:
首先,对 $em 变量中存储的电子邮件进行清理,以删除任何非法字符,如 '/><)*&^' 等。清理后,验证电子邮件,检查输入的电子邮件是否为有效格式. - URL 验证 – FILTER_SANITIZE_URL:与电子邮件过滤器一样,此过滤器也首先从 URL 中删除所有非法字符,然后检查格式是否有效。
输出:
https://www.geeksforgeeks.com is valid
代码说明:
存储在 $url 变量中的电子邮件首先被清理以删除非法字符。之后,检查 URL 以确定 URL 格式是否有效。