PHP中使用Filter进行数据安全过滤
2012-08-07 15:09
716 查看
安全是个永恒的话题,任何一个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;过滤时,返回过滤后内容。
下面是一些使用例子:
[php]
view plaincopyprint?
//整型格式测试
$var = '12345';
var_dump(filter_var($var, FILTER_VALIDATE_INT));
$var = '12B45';
var_dump(filter_var($var, FILTER_VALIDATE_INT));
//Email格式测试
$var = 'linvo@126.com';
var_dump(filter_var($var, FILTER_VALIDATE_EMAIL));
$var = 'linvo@126com';
var_dump(filter_var($var, FILTER_VALIDATE_EMAIL));
//IP格式测试
$var = '11.22.33.44';
var_dump(filter_var($var, FILTER_VALIDATE_IP));
$var = '111.222.333.444';
var_dump(filter_var($var, FILTER_VALIDATE_IP));
//URL格式测试
$var = 'http://www.linvo2008.cn/blog';
var_dump(filter_var($var, FILTER_VALIDATE_URL));
$var = 'www.linvo2008.cn/blog';
var_dump(filter_var($var, FILTER_VALIDATE_URL));
//去除超文本标签测试
$var = 'This is a <a href="#" mce_href="#">link</a> test!';
var_dump(filter_var($var, FILTER_SANITIZE_STRING));
其他详细参数见PHP手册。
以上是页面内部变量的过滤,但我们希望的是可以直接验证用户输入的数据,这些数据是外部变量过来的,这就用到了filter_input函数:
mixed filter_input ( int $type , string $variable_name [, int $filter [, mixed $options ]] )
从函数原型可以看出,除了原来那三个参数外,多了第一个$type参数。该参数用于设置要过滤变量所在的数组,也就相当于:post方式过来的保存在$_POST数组中;get方式过来的保存在$_GET数组中一样。它也是通过预定义常量进行设置的,如:post对应INPUT_POST,get对应INPUT_GET等。(更多常量见PHP手册)
下面也来个例子吧,该例子由两个页面组成:index.html前端表单页面;do.php后端处理页面。
file:index.html
[xhtml]
view plaincopyprint?
<form action="do.php" method="post">
<label>Name:</label>
<input name="name" type="text" />
<label>QQ:</label>
<input name="qq" type="text" />
<label>Email:</label>
<input name="email" type="text" />
<label>Blog:</label>
<input name="blog" type="text" />
<input type="submit" />
</form>
index.html页面演示效果(提交前):
do.php页面演示效果(提交后):
到这里,大家应该基本掌握了Filter的使用了,更多用途等待大家自己去发掘:)
---------------------------------------------------------------
来源:/article/2576257.html
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;过滤时,返回过滤后内容。
下面是一些使用例子:
[php]
view plaincopyprint?
//整型格式测试
$var = '12345';
var_dump(filter_var($var, FILTER_VALIDATE_INT));
$var = '12B45';
var_dump(filter_var($var, FILTER_VALIDATE_INT));
//Email格式测试
$var = 'linvo@126.com';
var_dump(filter_var($var, FILTER_VALIDATE_EMAIL));
$var = 'linvo@126com';
var_dump(filter_var($var, FILTER_VALIDATE_EMAIL));
//IP格式测试
$var = '11.22.33.44';
var_dump(filter_var($var, FILTER_VALIDATE_IP));
$var = '111.222.333.444';
var_dump(filter_var($var, FILTER_VALIDATE_IP));
//URL格式测试
$var = 'http://www.linvo2008.cn/blog';
var_dump(filter_var($var, FILTER_VALIDATE_URL));
$var = 'www.linvo2008.cn/blog';
var_dump(filter_var($var, FILTER_VALIDATE_URL));
//去除超文本标签测试
$var = 'This is a <a href="#" mce_href="#">link</a> test!';
var_dump(filter_var($var, FILTER_SANITIZE_STRING));
[php] view plaincopyprint? //IPv6格式测试(支持缩写形式) $var = '2001:0db8:85a3::1319:8a2e:0370:7344'; var_dump(filter_var($var, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)); //IPv6格式测试(支持缩写形式) $var = '2001:0db8:85a3::1319:8a2e:0370:7344'; var_dump(filter_var($var, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
其他详细参数见PHP手册。
以上是页面内部变量的过滤,但我们希望的是可以直接验证用户输入的数据,这些数据是外部变量过来的,这就用到了filter_input函数:
mixed filter_input ( int $type , string $variable_name [, int $filter [, mixed $options ]] )
从函数原型可以看出,除了原来那三个参数外,多了第一个$type参数。该参数用于设置要过滤变量所在的数组,也就相当于:post方式过来的保存在$_POST数组中;get方式过来的保存在$_GET数组中一样。它也是通过预定义常量进行设置的,如:post对应INPUT_POST,get对应INPUT_GET等。(更多常量见PHP手册)
下面也来个例子吧,该例子由两个页面组成:index.html前端表单页面;do.php后端处理页面。
file:index.html
[xhtml]
view plaincopyprint?
<form action="do.php" method="post">
<label>Name:</label>
<input name="name" type="text" />
<label>QQ:</label>
<input name="qq" type="text" />
<label>Email:</label>
<input name="email" type="text" />
<label>Blog:</label>
<input name="blog" type="text" />
<input type="submit" />
</form>
[php] view plaincopyprint? $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; $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的使用了,更多用途等待大家自己去发掘:)
---------------------------------------------------------------
来源:/article/2576257.html
相关文章推荐
- PHP中使用Filter进行数据安全过滤
- PHP中使用Filter进行数据安全过滤
- Flex 使用ArrayCollection的FilterFunction进行数据过滤
- PHP 安全手册 第六条 表单 不希望变动的数据要设置为常量 使用session 进行跟踪
- Flex 使用ArrayCollection的FilterFunction进行数据过滤
- Flex 使用ArrayCollection的FilterFunction进行数据过滤
- Flex 使用ArrayCollection的FilterFunction进行数据过滤
- Flex 使用ArrayCollection的FilterFunction进行数据过滤
- PHP中字符安全过滤函数使用小结
- PHP使用mysqli进行数据读取
- Filter的使用(对请求和响应数据进行替换)
- [转]PHP之中使用共享内存进行高速数据更新的一种方案
- 使用JDK中的安全包对数据进行加解密
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- 使用RSA对C++ 客户端和 PHP 服务端之间通信的数据进行加密
- 如何使得中文不被 json_encode 不编码成 unicode PHP 浏览:9722 2014年08月14日 使用 php 自带的 json_encode 函数对数据进行编码时,中文都会变成
- 使用java8的lambada表达式按照一定的条件对查出的数据进行过滤
- php使用fputcsv进行大数据的导出
- 使用JDK中的安全包对数据进行加解密
- 使用php扩展trie_filter,利用词库,过滤敏感词