快速提示:如何使用 PHP 过滤数据

在本文中,我们将探讨为什么过滤合并到我们的应用程序中的任何内容如此重要。 特别是,我们将研究如何在 PHP 中验证和清理外部数据。

永远不要(永远!)相信您应用程序中的外部输入。 对于任何开发 Web 应用程序的人来说,这是最重要的课程之一。

外部输入可以是任何东西——从 $_GET$_POST 表单输入数据、HTTP 请求正文中的某些元素,甚至是 $_SERVER 超全球的。 Cookie、会话值以及上传和下载的文档文件也被视为外部输入。

每次我们处理、输出、包含或连接外部数据到我们的代码中时,攻击者都有可能将代码注入我们的应用程序(所谓的注入攻击)。 因此,我们需要确保正确过滤每条外部数据,以便将其安全地合并到应用程序中。

在过滤方面,主要有两种类型:验证和清理。

验证

验证确保外部输入符合我们的预期。 例如,我们可能需要一个电子邮件地址,所以我们需要一些带有 ********@*****.*** 格式。 为此,我们可以使用 FILTER_VALIDATE_EMAIL 筛选。 或者,如果我们需要一个布尔值,我们可以使用 PHP 的 FILTER_VALIDATE_BOOL 筛选。

其中最有用的过滤器是 FILTER_VALIDATE_BOOL, FILTER_VALIDATE_INT, 和 FILTER_VALIDATE_FLOAT 过滤基本类型和 FILTER_VALIDATE_EMAILFILTER_VALIDATE_DOMAIN 分别过滤电子邮件和域名。

另一个非常重要的过滤器是 FILTER_VALIDATE_REGEXP 这使我们可以根据正则表达式进行过滤。 使用此过滤器,我们可以通过更改过滤所针对的正则表达式来创建自定义过滤器。

可以在此处找到所有可用的 PHP 验证过滤器。

消毒

清理是从外部输入中删除非法或不安全字符的过程。

最好的例子是我们在将数据库输入插入原始 SQL 查询之前对其进行清理。

同样,一些最有用的清理过滤器包括用于清理基本类型的过滤器,例如 FILTER_SANITIZE_STRING, FILTER_SANITIZE_CHARSFILTER_SANITIZE_INT, 但是也 FILTER_SANITIZE_URLFILTER_SANITIZE_EMAIL 清理 URL 和电子邮件。

所有 PHP 清理过滤器都可以在这里找到。

filter_var() 和 filter_input()

现在我们知道 PHP 有完整的过滤器可供选择,我们需要知道如何使用它们。

过滤器应用程序是通过 filter_var()filter_input() 功能。

filter_var() 函数将指定的过滤器应用于变量。 它将采用要过滤的值、要应用的过滤器和一个可选的选项数组。 例如,如果我们试图验证一个电子邮件地址,我们可以使用这个:

<?php

$email = [email protected]:

if ( filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
    echo ("This email is valid");
}

如果目标是净化一个字符串,我们可以使用这个:

<?php
$string = "<h1>Hello World</h1>";

$sanitized_string = filter_var ( $string, FILTER_SANITIZE_STRING);
echo $sanitized_string;

filter_input() 函数从表单输入中获取外部输入并对其进行过滤。

它的工作原理就像 filter_var() 功能,但它需要一种输入(我们可以选择 GET, POST, COOKIE, SERVER, 或者 ENV)、要筛选的变量和筛选器。 可选地,它也可以采用一系列选项。

再一次,如果我们想检查外部输入变量“email”是否通过 GET 对于我们的应用程序,我们可以使用它:

<?php

if ( filter_input( INPUT_GET, "email", FILTER_VALIDATE_EMAIL ) ) {
    echo "The email is being sent and is valid.";
}

结论

这些是 PHP 中数据过滤的基础知识。 其他技术可能用于过滤外部数据,例如应用正则表达式,但我们在本文中看到的技术对于大多数用例来说已经足够了。

确保您了解验证和清理之间的区别以及如何使用过滤器功能。 有了这些知识,您的 PHP 应用程序将更加可靠和安全!

阅读更多

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注