热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正则应用实例-用户输入数据过滤

通常php可以通过以下方式接受用户提交的数据表单POST和地址栏的GET两种途径,无论哪一种路径,我们都不能信任用户输入的数据,都要通过程序进行过滤。下面给出常用的数据过滤

通常php可以通过以下方式接受用户提交的数据表单POST和地址栏的GET两种途径,无论哪一种路径,我们都不能信任用户输入的数据,都要通过程序进行过滤。下面给出常用的数据过滤函数。

平板视图
打印?
01 functioninitUserInput()
02 {
03     $_data=array($_GET,$_POST,$_COOKIE);
04     $data=array();
05     foreach($_dataAS$input)
06     {
07         if(is_array($input))
08         {
09             foreach($inputas$k=>$v)
10             {
11                 $k= filter_key($k);
12                 //做了二维数组的过滤 三维没有考虑
13                 if(is_array($v))
14                 {
15                     foreach($vas$k1=>$v1)
16                     {
17                         $k1= filter_key($k1);
18                         $return[$k][$k1] = filter_value($v1);
19                     }
20                 }
21                 else
22                 {
23                     $return[$k] = filter_value($v);
24                 }
25             }
26         }
27     }
28     //禁止超全局变量
29     unset($_GET,$_POST,$_COOKIE);
30     return$data;
31 }
32 //过滤超全局变量的键 其实是地址栏的参数名和表单的名称
33 functionfilter_key($key)
34 {
35     if(is_numeric($key))
36     {
37         return$key;
38     }
39     elseif(empty($key))
40     {
41         return'';
42     }
43     //过滤'..' 这和系统的目录结构相关
44     if(strpos($key,'..') !== false)
45     {
46         $key=str_replace('..','',$key);
47     }
48     //这个和魔术常量,魔术方法有关
49     if(strpos($key,'__') !== false)
50     {
51         $key= preg_replace('/__(?:.+?)__/','',$key);
52     }
53     //只允许符合数字 字母 下划线 . - 而且只允许数字字母下划线开头
54     returnpreg_replace('/^([\w\.\-_]+)$/','\\1',$key);
55 }
56 functionfilter_value($val)
57 {
58     //当表单中存在html字段时 说明我们需要传入的是纯html代码 不需要过滤
59     if($_REQUEST['html'])
60     {
61         return$val;
62     }
63     if(is_numeric($val))
64     {
65         return$val;
66     }
67     elseif(empty($val))
68     {
69         returnis_array($val) ?array() :'';
70     }
71     //过滤Javascript代码
72     $val= preg_replace("/
73   
74     $invalid_string=array('&#032;','','>','<','"','!', "'", "\n", '$', "\r");
75     $valid_string=array(' ','<&#33;--','-->','>','<','"','&#33;','&#39;',"\n",'&#036;','');
76     $val=str_replace($invalid_string,$valid_string,$val);
77     //将反转义字符 \&# 或者\?# 替换为html字体实符集
78     returnpreg_replace('/\\\(&#|\?#)/','&#092;',$val);
79 }

分别过滤了数组的key和value,对应上面的filter_key和filter_value,总调度函数是initUserInput();主要过滤的POST数据GET数据和COOKIE数据。



推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文介绍了如何利用jQuery实现对网页上多个div元素的显示与隐藏控制,包括基本的toggle方法及更复杂的显示隐藏逻辑。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • CSS Border 属性:solid 边框的使用详解
    本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 在日常生活中,支付宝已成为不可或缺的支付工具之一。本文将详细介绍如何通过支付宝实现免费提现,帮助用户更好地管理个人财务,避免不必要的手续费支出。 ... [详细]
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 软件开发史上最具影响力的十位编程大师(附图解)
    在软件开发领域,有十位编程大师对行业发展产生了深远影响。本文基于国外知名社区的一项评选,通过图文并茂的形式,详细介绍了这十位杰出人物,包括游戏开发先驱John Carmack等,为读者呈现了他们卓越的技术贡献与创新精神。 ... [详细]
  • 本文旨在构建一个JavaScript函数,用于对用户输入的电子邮件地址和密码进行有效性验证。该函数将确保输入符合标准格式,并检查密码强度,以提升用户账户的安全性。通过集成正则表达式和条件判断语句,该方法能够有效防止常见的输入错误,同时提供即时反馈,改善用户体验。 ... [详细]
  • SoIhaveanappthathasarightsidebarwhosevisibilityistoggledviaabutton.Inthatsidebar ... [详细]
  • javascript学习笔记之10个原生技巧-1、原生JavaScript实现字符串长度截取复制代码代码如下:functioncutstr(str,len){   vartemp; ... [详细]
author-avatar
eric_sun2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有