PHP中使用Filter进行数据安全过滤
安全是个永恒的话题,任何一个PHPer都免不了要过数据验证及过滤这一关。通常的验证方法,相信只要有点经验的PHPer都能写个八九不离十,只是安全性高低的问题。这里我来介绍一种利用PHP的Filter来进行验证的方法,既简单又高效。
Filter曾作为PHP扩展(PECL)的一部分,使用时需要加载外部库文件,但在PHP 5.2之后的版本已编译到PHP中,使用时无需加载。目前filter提供函数有:filter_has_var、filter_id、 filter_input_array、filter_input、filter_var_array、filter_var。限于篇幅,这里只介绍两个最常使用的,filter_var和filter_input。filter_var用于页面内部变量的内容过滤,filter_input用于外部变量(如POST、GET、COOKIE等)的内容过滤。
?
首先来介绍filter_var函数,先看下函数原型:
mixed filter_var ( mixed $variable [, int $filter [, mixed $options ]] )
$variable——要过滤的变量
$filter——要过滤的类型ID常量
$options——过滤类型参数
其中需要重点掌握的是$filter参数,它是一些有特殊含义的预定义常量,如:FILTER_VALIDATE_INT代表验证整数型变量,FILTER_VALIDATE_EMAIL代表验证email格式等。(更多常量可以查看PHP手册关于Filter部分的内容,里面有该参数的详细列表)
对于返回值的情况,匹配时,匹配正确返回原内容,匹配错误时返回false;过滤时,返回过滤后内容。
下面是一些使用例子:
?大家可以自己运行一下看看结果。另外,对于第三个$options参数,可以对验证类型进行详细设置。比如验证IP时,可以通过该参数设置过滤规则为IPv4还是IPv6:
?
?file:do.php
?
<?$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);$qq = filter_input(INPUT_POST, 'qq', FILTER_VALIDATE_INT);$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);$blog = filter_input(INPUT_POST, 'blog', FILTER_VALIDATE_URL); $error = '<em>Error</em>';echo 'Name:',$name;$msg = $qq === false ? $error : $qq;echo 'QQ:',$msg;$msg = $email === false ? $error : $email;echo 'Email:',$msg;$msg = $blog === false ? $error : $blog;echo 'Blog:',$msg;?index.html页面演示效果(提交前):
do.php页面演示效果(提交后):
到这里,大家应该基本掌握了Filter的使用了,更多用途等待大家自己去发掘:)?
参考:http://www.w3school.com.cn/php/php_ref_filter.asp
?
?
?
?
?
?
?