supergnaw/form-security

用于简化网页表单安全的类

v1.0.2 2024-05-14 04:38 UTC

This package is auto-updated.

Last update: 2024-09-30 21:51:54 UTC


README

PHP类,用于简化网页表单安全。创建此类的目的是帮助减轻跨站请求伪造(CSRF)的风险。该类可以验证以下类型的输入:

  • 布尔值
  • 数字
    • 浮点数
    • 整数
    • 十六进制整数
    • 八进制整数
  • 网络
    • IPv4
    • IPv6
    • MAC地址
  • 时间戳
    • 日期
    • 时间
    • 时间戳
  • 字符串
    • 字母数字
    • 十六进制
    • 电子邮件
    • 编码HTML
    • URL
    • 字符串

令牌

表单令牌

FormSecurity可以生成用于验证表单只能提交一次的非ce tokens。要使用令牌,只需生成一个令牌,将其添加到隐藏的表单输入中,然后验证提交的令牌与会话变量中保存的令牌是否一致。

生成令牌

$exampleToken = FormSecurity::token_generate('example');

将生成的令牌存储在表单隐藏输入中

<form>
    <input type="hidden" name="token_name" value="<?php echo $exampleToken; ?>">
</form>

验证提交的令牌

if (FormSecurity::token_verify("token_name")) {
    echo "security token is valid!";
} else {
    echo "security token is invalid!";
}

清除所有令牌

如果出于任何原因需要清除任何已保存的令牌,请使用token_clear_all()

FormSecurity::token_clear_all();

白名单 & 黑名单

FormSecurity可以对给定的输入应用白名单或黑名单,并过滤掉不想要的或意外的输入。

$input = [
    "var1" => 1,
    "var2" => 2,
    "var3" => 3
];

$whitelist = ["var1", "var2"];
$output = FilterSecurity::apply_whitelist($whitelist, $input);
// $output = [1, 2]

$blacklist = ["var1", "var3"];
$output = FilterSecurity::apply_blacklist($blacklist, $input);
// $output = [2]

过滤器

FormSecurity可以过滤给定输入(getpostcookieserverenv)的值,并删除任何不符合预期类型的值(boolfloathexintintoctintipv4ipv6macdatetimetimestampstringalnumurlemailhtmlenc)。

$filter = [
    "foo" => "int",
    "bar" => "string",
];

$_GET = [
    "foo" => "1",
    "bar" => "2"
]
$get = FormSecurity::filter_input(input: "get", types: $filter);
// $get = ["2"]

$_POST = [
    "foo" => 1,
    "bar" => 2
];
$post = FormSecurity::filter_input(input: "post", types: $filter);
// $post = [1]

细粒度过滤

FormSecurity过滤器也可以单独使用来验证单个输入,其中任何失败都将返回null。

  • FormSecurity::filter_boolean()
  • FormSecurity::filter_float()
  • FormSecurity::filter_int()
  • FormSecurity::filter_hexint()
  • FormSecurity::filter_octint()
  • FormSecurity::filter_ipv4()
  • FormSecurity::filter_ipv6()
  • FormSecurity::filter_mac()
  • FormSecurity::filter_string()
  • FormSecurity::filter_alnum()
  • FormSecurity::filter_hex()
  • FormSecurity::filter_url()
  • FormSecurity::filter_email()
  • FormSecurity::filter_htmlenc()
  • FormSecurity::filter_date()
  • FormSecurity::filter_time()
  • FormSecurity::filter_timestamp()

字符串清理

FormSecurity可以清理字符串

只允许字母字符

$input = "Hell0 w0rld!";
$output = FormSecurity::clean_to_alpha($input);
// $output = "Hellwrld"

只允许字母数字字符

$input = "Hell0 w0rld!";
$output = FormSecurity::clean_to_alnum($input);
// $output = "Hell0w0rld"