安全是个永恒的话题,任何一个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;过滤时,返回过滤后内容。

下面是一些使用例子:

<?//整型格式测试
$var = '12345';
var_dump(filter_var($var, FILTER_VALIDATE_INT));
$var = '12B45';
var_dump(filter_var($var, FILTER_VALIDATE_INT));$var=300;
$int_options = array("options"=>array("min_range"=>0, "max_range"=>256));
var_dump(filter_var($var, FILTER_VALIDATE_INT
, $int_options))//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));

大家可以自己运行一下看看结果。另外,对于第三个$options参数,可以对验证类型进行详细设置。比如验证IP时,可以通过该参数设置过滤规则为IPv4还是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

<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>

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

PHP中使用Filter进行数据安全过滤相关推荐

  1. vue 中的el表达式_Vue中vue.filter()的使用方法介绍(过滤)

    本篇文章给大家带来的内容是关于Vue中vue.filter()的使用方法介绍(过滤),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Vue过滤器 {{msg |msgFormat}} ...

  2. js中数组filter过滤奇偶数_js--数组的filter()过滤方法的使用

    前言 你还在通过for循环遍历数组吗?你还在遍历之后一项一项的通过if判断过滤你需要的数据吗?你还在写着一大堆代码实现一个简单的过滤数据功能吗?那么,今天他来了.他就是这里要介绍的es6中数组filt ...

  3. SpringBoot学习之路:09.Spring Boot中添加Filter应用

    2019独角兽企业重金招聘Python工程师标准>>> 上篇文章中说了SpringBoot中是如何使用servlet的,本文将讲解在SpringBoot中对过滤器Filter的实现 ...

  4. ABP中的Filter(下)

    接着上面的一个部分来叙述,这一篇我们来重点看ABP中的AbpUowActionFilter.AbpExceptionFilter.AbpResultFilter这三个部分也是按照之前的思路来一个个介绍 ...

  5. web.xml 中的filter

    Servlet API的2.3版本中最重要的一个新功能就是能够为servlet和JSP页面定义过滤器.过滤器提供了某些早期服务器所支持的非标准"servlet链接"的一种功能强大且 ...

  6. 纹理过滤中的双线,三线过滤

    2019独角兽企业重金招聘Python工程师标准>>> 为什么在纹理采样时需要texture filter(纹理过滤). 我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中 ...

  7. Java中的Filter

    Java中的Filter 什么是Filter Filter的运行结构 filter的应用场景 filter的生命周期 filter的代码实现 参考资料 什么是Filter Filter的意思是过滤器, ...

  8. python中的filter()函数

    1 filter()函数的简介和语法: filter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成新列表. filter()语法如下: filter(function,itera ...

  9. 使用 Powerapps 过程中解决过的问题 - 4 - 根据在搜索框中输入文本自动对数据源中不同的字段进行过滤和显示

    在"解析Power  Apps 自动生成的App - 2 - 浏览页面" 一文里, 有涉及到类似的问题.在自动生成的App 的浏览页面里,默认的为搜索框提供了下面的代码段: Ite ...

最新文章

  1. Linux运维跳槽必备的40道面试精华题
  2. 《自然语言处理入门》不是 NLP 学习路上的万能药
  3. Linux的profile与bashrc的分析
  4. 数据库事务的隔离级别
  5. 经典C语言程序100例之六五
  6. oracle时间类型转化成java对象_Oracle数据库date类型与Java中Date的联系与转化
  7. windows linux cpu 抢占式 时间片_嵌入式Linux中进程调度怎样来解析
  8. 在Ubuntu 11.10中将窗口按钮移回右侧
  9. ThinkPHP实现支付宝接口功能
  10. python使用新线程执行目标函数
  11. 教你开发Jquery插件-Jquery插件开发教程
  12. fuel部署openStack
  13. ASP.NET MVC 2 正式版发布了的
  14. dubbo和zookeper使用_Dubbox与Zookeeper简介及入门小案例
  15. vb改动microsip让microsip隐藏然后命令拨打电话
  16. 快递100 物流公司编码
  17. ACM入门-最小生成树及其应用
  18. VBA快速转换数据格式,将CBOT结算价历史数据导入数据库(图文)
  19. 聊一聊如何把SSL证书安装到小鸟云服务器上
  20. springboot注解实现自动插入创建时间和更新时间到数据库

热门文章

  1. android 调出键盘表情_如何在Android的G板键盘中搜索表情符号和GIF | MOS86
  2. url带多个参数_动态URL和静态URL做seo优化不必二选一
  3. python怎么命名未知数_python—命名规范
  4. 网页mp3提取器_用Python写一个酷狗音乐下载器!
  5. linux那些事之LRU(4)
  6. jquery获取radio的值,a标签传值
  7. python网络模型的保存与加载
  8. 请求时才延迟加载JavaScript文件 - 优化篇
  9. 一款精美的漂亮的EMLOG模板
  10. 工商注册资质代办类网站源码 公司注册类网站织梦模板