使用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_EMAIL
和FILTER_VALIDATE_DOMAIN
分别过滤电子邮件和域名。
另一个非常重要的过滤器是FILTER_VALIDATE_REGEXP
允许我们根据正则表达式进行过滤的过滤器。使用此过滤器,我们可以通过更改过滤所针对的正则表达式来创建自定义过滤器。
可以在此处找到所有可用的 PHP 验证过滤器。
清理
清理是从外部输入中删除非法或不安全字符的过程。
最好的例子是我们在将数据库输入插入原始 SQL 查询之前对其进行清理。
同样,一些最有用的清理过滤器包括用于清理基本类型(如FILTER_SANITIZE_STRING
,FILTER_SANITIZE_CHARS
和)的过滤器FILTER_SANITIZE_INT
,FILTER_SANITIZE_URL
以及FILTER_SANITIZE_EMAIL
用于清理 URL 和电子邮件的过滤器。
可以在此处找到所有 PHP 清理过滤器。
filter_var() 和 filter_input()
现在我们知道 PHP 有完整的过滤器可供选择,我们需要知道如何使用它们。
过滤器应用程序是通过filter_var()
和filter_input()
功能完成的。
该filter_var()
函数将指定的过滤器应用于变量。它将采用要过滤的值、要应用的过滤器和一个可选的选项数组。例如,如果我们试图验证一个电子邮件地址,我们可以使用这个:
<?php $email = your.email@sitepoint.com: 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 中数据过滤的基础知识。其他技术可能用于过滤外部数据,例如应用 regex,但我们在本文中看到的技术对于大多数用例来说已经足够了。
确保您了解验证和清理之间的区别以及如何使用过滤器功能。有了这些知识,您的 PHP 应用程序将更加可靠和安全!