关键要点
filter_var()
和 filter_input()
函数应用这些过滤器,从而使您的 PHP 应用程序更安全、更可靠。本文将探讨为什么过滤应用中包含的任何内容如此重要。特别是,我们将研究如何在 PHP 中验证和清理外部数据。
绝对不要信任应用中的外部输入。这是任何开发 Web 应用程序的人都必须学习的最重要的经验之一。
外部输入可以是任何东西——从 $_GET
和 $_POST
表单输入数据,HTTP 请求正文中的某些元素,甚至 $_SERVER
超全局变量中的某些值。Cookie、会话值以及上传和下载的文档文件也被视为外部输入。
每次我们将外部数据处理、输出、包含或连接到我们的代码中时,攻击者都有可能将代码注入到我们的应用程序中(所谓的注入攻击)。因此,我们需要确保每一段外部数据都经过适当的过滤,以便可以安全地将其整合到应用程序中。
在过滤方面,主要有两种类型:验证和清理。
验证
验证确保外部输入符合我们的预期。例如,我们可能期望一个电子邮件地址,因此我们期望类似于 name@domain.com
的格式。为此,我们可以使用 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()
函数将指定的过滤器应用于变量。它将获取要过滤的值、要应用的过滤器以及可选的选项数组。例如,如果我们尝试验证电子邮件地址,我们可以使用以下代码:
<code class="language-php"><?php $email = 'your.email@sitepoint.com'; if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo("This email is valid"); }</code>
如果目标是清理字符串,我们可以使用以下代码:
<code class="language-php"><?php $string = "<h1>Hello World</h1>"; $sanitized_string = filter_var($string, FILTER_SANITIZE_STRING); echo $sanitized_string;</code>
filter_input()
函数从表单输入获取外部输入并对其进行过滤。
它的工作方式与 filter_var()
函数类似,但它需要输入类型(我们可以从 GET、POST、COOKIE、SERVER 或 ENV 中选择)、要过滤的变量和过滤器。它还可以选择性地获取选项数组。
同样,如果我们想检查外部输入变量“email”是否通过 GET 发送到我们的应用程序,我们可以使用以下代码:
<code class="language-php"><?php if (filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "The email is being sent and is valid."; }</code>
结论
这些是 PHP 中数据过滤的基础知识。可以使用其他技术来过滤外部数据,例如应用正则表达式,但是我们在本文中看到的技术对于大多数用例来说已经足够了。
确保您了解验证和清理之间的区别以及如何使用过滤器函数。有了这些知识,您的 PHP 应用程序将更加可靠和安全!
PHP 数据过滤对于确保 Web 应用程序的安全性和完整性至关重要。它有助于验证和清理用户输入,这是 SQL 注入和跨站点脚本 (XSS) 等安全漏洞的常见来源。通过过滤数据,您可以防止恶意或错误的数据对您的应用程序或数据库造成损害。它还有助于维护数据一致性和可靠性,这对于应用程序的顺利运行至关重要。
PHP 数据过滤通过对数据应用特定的过滤器函数来工作。这些函数可以验证数据(检查数据是否满足特定条件)或清理数据(从数据中删除任何非法或不安全的字符)。PHP 提供了各种内置过滤器函数,您可以使用它们,例如 filter_var()
、filter_input()
和 filter_has_var()
。
一些常见的 PHP 过滤器函数包括 filter_var()
、filter_input()
、filter_has_var()
和 filter_id()
。filter_var()
函数使用指定的过滤器过滤变量。filter_input()
函数按名称获取特定的外部变量并对其进行可选过滤。filter_has_var()
函数检查指定输入类型的变量是否存在,而 filter_id()
函数返回属于命名过滤器的过滤器 ID。
filter_var()
函数?PHP 中的 filter_var()
函数用于使用指定的过滤器过滤变量。它接受两个参数:要过滤的变量和要应用的过滤器类型。例如,要验证变量是否为电子邮件,您可以将 FILTER_VALIDATE_EMAIL
过滤器与 filter_var()
函数一起使用,如下所示:
<code class="language-php"><?php $email = 'your.email@sitepoint.com'; if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo("This email is valid"); }</code>
在 PHP 中验证数据涉及检查数据是否满足特定条件。例如,您可以验证电子邮件地址以确保其格式正确。另一方面,清理数据涉及从数据中删除或替换任何非法或不安全的字符。这通常是为了防止 SQL 注入和跨站点脚本 (XSS) 等安全漏洞。
您可以使用 filter_input()
函数和清理过滤器在 PHP 中清理用户输入。例如,要清理用户名 GET 输入,您可以使用 FILTER_SANITIZE_STRING
过滤器,如下所示:
<code class="language-php"><?php $string = "<h1>Hello World</h1>"; $sanitized_string = filter_var($string, FILTER_SANITIZE_STRING); echo $sanitized_string;</code>
PHP 过滤器标志用于向过滤过程添加额外的约束或修饰符。一些常见的标志包括 FILTER_FLAG_STRIP_LOW
、FILTER_FLAG_STRIP_HIGH
、FILTER_FLAG_ENCODE_LOW
和 FILTER_FLAG_ENCODE_HIGH
。例如,FILTER_FLAG_STRIP_LOW
标志从输入中去除 ASCII 值低于 32 的字符。
您可以通过将它们作为第三个参数传递给 filter_var()
或 filter_input()
函数来在 PHP 中使用过滤器标志。例如,要过滤 IP 地址并仅允许 IPv4 地址,您可以使用 FILTER_FLAG_IPV4
标志,如下所示:
<code class="language-php"><?php if (filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "The email is being sent and is valid."; }</code>
filter_has_var()
函数是什么?PHP 中的 filter_has_var()
函数用于检查指定输入类型的变量是否存在。它接受两个参数:输入类型和变量的名称。如果变量存在,则返回 TRUE;否则,返回 FALSE。
filter_has_var()
函数?您可以使用 PHP 中的 filter_has_var()
函数来检查特定输入变量是否存在。例如,要检查名为“username”的 POST 变量是否存在,您可以这样做:
<code class="language-php"><?php $email = 'your.email@sitepoint.com'; if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo("This email is valid"); }</code>
以上是快速提示:如何使用PHP过滤数据的详细内容。更多信息请关注PHP中文网其他相关文章!