Php 简明教程
PHP - Sanitize Input
在 PHP 中,重要的是要确保在服务器端代码处理输入数据之前,通过删除任何不需要的字符来正确清理输入数据。通常,用户通过 HTML 表单向 PHP Web 应用程序输入其数据。如果表单数据包含任何不需要的字符,可能会造成损害,因此必须执行适当的清理操作。
输入清理可以使用 PHP 中以下一个或多个函数的帮助进行。
The htmlspecialchars() Function
此函数将特殊字符转换为 HTML 实体。
htmlspecialchars(
string $string,
int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
?string $encoding = null,
bool $double_encode = true
): string
在 HTML 中,某些字符有着特殊的意义。这个 htmlspecialchars() 函数用于对 HTML 实体中的特殊字符进行编码。当您希望将用户输入显示为 HTML 时,这将非常有用,而且希望防止脚本注入攻击。
以下 special characters 按下述所示方式翻译 −
Character |
Replaced by |
& (ampersand) |
& |
" (double quote) |
", unless ENT_NOQUOTES is set |
' (single quote) |
' (for ENT_HTML401 ) or ' (for ENT_XML1, ENT_XHTML or ENT_HTML5 ), but only when ENT_QUOTES is set |
< (less than) |
< |
> (greater than) |
> |
Flag Constants
flags 参数是一个或多个以下标志的位掩码,它们指定如何处理引号、无效的代码单元序列和使用的文档类型。
Sr.No |
Constant & Description |
1 |
ENT_COMPAT 将转换双引号,而忽略单引号。 |
2 |
ENT_QUOTES 将转换双引号和单引号。 |
3 |
ENT_NOQUOTES 将保留双引号和单引号不变。 |
4 |
ENT_IGNORE 舍弃无效的代码单元序列,而不是返回一个空字符串。 |
5 |
ENT_SUBSTITUTE 用 Unicode Replacement Character U+FFFD (UTF-8) 或 � 替换无效的代码单元序列 |
6 |
ENT_DISALLOWED 用 Unicode Replacement Character U+FFFD (UTF-8) 或 �(否则)替换给定文档类型的无效代码点,而不是保持原样。这可能会很有用。 |
7 |
ENT_HTML401 将代码作为 HTML 4.01 处理。 |
8 |
ENT_XML1 将代码作为 XML 1 处理。 |
9 |
ENT_XHTML Handle code as XHTML. |
10 |
ENT_HTML5 将代码作为 HTML 5 处理。 |
The strip_tags() Function
strip_tags() 函数从给定的字符串中删除所有 HTML 和 PHP 标记。
strip_tags(string $string, array|string|null $allowed_tags = null): string
当您希望确保用户输入不包含任何潜在的恶意标记时,这个函数非常有用。
allowed_tags 参数是一个可选的第二个参数,用于指定不应删除的标记。这些标记可以以字符串的形式给出,也可以作为数组给出。
The addslashes() Function
addslashes() 函数向字符串添加反斜杠。
addslashes(string $string): string
此函数返回一个字符串,在需要转义的字符前面添加反斜杠。这些字符为 −
-
Single Quote (')
-
Double Quote (")
-
Backslash (\)
-
NUL (The NUL Byte)
在向数据库中存储用户输入且希望防止 SQL 注入攻击时,请使用此函数。
The filter_var() Function
借助特定的过滤器标记,可以使用 filter_var() 函数来净化用户输入。
filter_var(mixed $value, int $filter =
FILTER_DEFAULT, array|int $options = 0): mixed
$value 参数是要净化其值的一个变量。$filter 参数是任何预定义的过滤器常量。
Sr.No |
ID & Description |
1 |
FILTER_SANITIZE_EMAIL 移除除字母数字和 !#$%&'*+-=?^_`{ 之外的所有字符。 |
}~@.[]. |
2 |
FILTER_SANITIZE_ENCODED URL 编码字符串,可以选择清除或编码特殊字符。 |
3 |
FILTER_SANITIZE_ADD_SLASHES 应用 addslashes()。(在 PHP 7.3.0 及以上版本中可用)。 |
4 |
FILTER_SANITIZE_NUMBER_FLOAT 移除除数字、+- 和选择性地移除 .,eE 之外的所有字符。 |
5 |
FILTER_SANITIZE_NUMBER_INT 移除除数字、加号和减号之外的所有字符。 |
6 |
FILTER_SANITIZE_SPECIAL_CHARS HTML 编码 '"<>& 字符和 ASCII 值小于 32 的字符,可以选择清除或编码其他特殊字符。 |
7 |
FILTER_SANITIZE_FULL_SPECIAL_CHARS 等同于用已设置的 ENT_QUOTES 调用 htmlspecialchars()。通过设置 FILTER_FLAG_NO_ ENCODE_QUOTES 可以禁用编码引号。 |
8 |
FILTER_SANITIZE_URL 移除除字母数字和 $-_.+!*'(),{} 之外的所有字符。 |
\\^~[]`<>#%";/?:@&=. |
9 |
FILTER_UNSAFE_RAW |