supergnaw / form-security
用于简化网页表单安全的类
v1.0.2
2024-05-14 04:38 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可以过滤给定输入(get
、post
、cookie
、server
或 env
)的值,并删除任何不符合预期类型的值(bool
、float
、hexint
、int
、octint
、ipv4
、ipv6
、mac
、date
、time
、timestamp
、string
、alnum
、url
、email
或 htmlenc
)。
$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"