PHP中使用Filter进行数据安全过滤

本文涉及的产品
数据安全中心,免费版
简介: 安全是个永恒的话题,任何一个PHPer都免不了要过数据验证及过滤这一关。通常的验证方法,相信只要有点经验的PHPer都能写个八九不离十,只是安全性高低的问题。这里我来介绍一种利用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;过滤时,返回过滤后内容。
下面是一些使用例子:

 

  1.  //整型格式测试   
  2. $var = '12345';  
  3. var_dump(filter_var($var, FILTER_VALIDATE_INT));  
  4. $var = '12B45';  
  5. var_dump(filter_var($var, FILTER_VALIDATE_INT));  
  6. //Email格式测试   
  7. $var = 'linvo@126.com';  
  8. var_dump(filter_var($var, FILTER_VALIDATE_EMAIL));  
  9. $var = 'linvo@126com';  
  10. var_dump(filter_var($var, FILTER_VALIDATE_EMAIL));  
  11. //IP格式测试   
  12. $var = '11.22.33.44';  
  13. var_dump(filter_var($var, FILTER_VALIDATE_IP));  
  14. $var = '111.222.333.444';  
  15. var_dump(filter_var($var, FILTER_VALIDATE_IP));  
  16. //URL格式测试   
  17. $var = 'http://www.linvo2008.cn/blog';  
  18. var_dump(filter_var($var, FILTER_VALIDATE_URL));  
  19. $var = 'www.linvo2008.cn/blog';  
  20. var_dump(filter_var($var, FILTER_VALIDATE_URL));  
  21. //去除超文本标签测试   
  22. $var = 'This is a <a href="#" mce_href="#">link</a> test!';  
  23. var_dump(filter_var($var, FILTER_SANITIZE_STRING));  
 

 

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

 

  1. //IPv6格式测试(支持缩写形式)   
  2. $var = '2001:0db8:85a3::1319:8a2e:0370:7344';  
  3. 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

  1. <form action="do.php" method="post">  
  2. <label>Name:</label>  
  3. <input name="name" type="text" />  
  4. <label>QQ:</label>  
  5. <input name="qq" type="text" />  
  6. <label>Email:</label>  
  7. <input name="email" type="text" />  
  8. <label>Blog:</label>  
  9. <input name="blog" type="text" />  
  10. <input type="submit" />  
  11. </form>  
 

 

file:do.php

  1. $name  = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);  
  2. $qq  = filter_input(INPUT_POST, 'qq', FILTER_VALIDATE_INT);  
  3. $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);  
  4. $blog  = filter_input(INPUT_POST, 'blog', FILTER_VALIDATE_URL);   
  5. $error  = '<em>Error</em>';  
  6. echo 'Name:',$name;  
  7. $msg  = $qq === false ? $error : $qq;  
  8. echo 'QQ:',$msg;  
  9. $msg  = $email === false ? $error : $email;  
  10. echo 'Email:',$msg;  
  11. $msg  = $blog === false ? $error : $blog;  
  12. echo 'Blog:',$msg;  
 

 

index.html页面演示效果(提交前):
index.html

do.php页面演示效果(提交后):
do.php
到这里,大家应该基本掌握了Filter的使用了,更多用途等待大家自己去发掘:)

 

---------------------------------------------------------------

来源:http://blog.csdn.net/linvo/article/details/3893674

目录
相关文章
|
6月前
|
SQL 安全 PHP
PHP中的数据安全与防护措施探析
在当今信息时代,数据安全问题备受关注,尤其对于PHP开发者来说,保护用户数据至关重要。本文将从数据安全的重要性、常见威胁、以及防护措施等方面展开讨论,帮助PHP开发者加强数据安全意识,提升应对能力。
|
Web App开发 XML 算法
file_put_contents利用技巧(php://filter协议)
file_put_contents利用技巧(php://filter协议)
338 0
|
2月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
2月前
|
NoSQL 关系型数据库 MySQL
不是 PHP 不行了,而是 MySQL 数据库扛不住啊
【9月更文挑战第8天】这段内容讨论了MySQL在某些场景下面临的挑战及其原因,并指出这些问题不能完全归咎于MySQL本身。高并发读写压力、数据量增长以及复杂查询和事务处理都可能导致性能瓶颈。然而,应用程序设计不合理、系统架构不佳以及其他数据库选择和优化策略不足也是重要因素。综合考虑这些方面才能有效解决性能问题,而MySQL通过不断改进和优化,仍然是许多应用场景中的可靠选择。
124 9
|
3月前
|
存储 SQL 关系型数据库
PHP与MySQL交互的奥秘
【8月更文挑战第29天】在编程的世界里,PHP和MySQL就像是一对默契的舞伴,共同演绎着数据的交响曲。本文将带你探索它们之间的互动,从连接数据库到执行查询,再到处理结果,每一步都充满了节奏与和谐。我们将一起走进这段代码的旅程,感受数据流动的魅力。
|
4天前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发深度解析####
本文作为技术性文章,深入探讨了PHP与MySQL结合在动态网站开发中的应用实践,从环境搭建到具体案例实现,旨在为开发者提供一套详尽的实战指南。不同于常规摘要仅概述内容,本文将以“手把手”的教学方式,引导读者逐步构建一个功能完备的动态网站,涵盖前端用户界面设计、后端逻辑处理及数据库高效管理等关键环节,确保读者能够全面掌握PHP与MySQL在动态网站开发中的精髓。 ####
|
5天前
|
关系型数据库 MySQL PHP
PHP与MySQL动态网站开发实战指南####
本文深入探讨了PHP与MySQL在动态网站开发中的应用实践,通过具体案例解析如何高效结合这两大技术构建数据驱动的Web应用。文章将涵盖环境搭建、基础语法回顾、数据库设计与操作、用户注册与登录系统实现等关键步骤,旨在为开发者提供一个从零到一的项目实战路径,展示PHP与MySQL协同工作的强大能力。 ####
|
25天前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。