热门标签 | 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数据。



推荐阅读
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • Linux中的yum安装软件
    yum俗称大黄狗作用:解决安装软件包的依赖关系当安装依赖关系的软件包时,会将依赖的软件包一起安装。本地yum:需要yum源,光驱挂载。yum源:(刚开始查看yum源中的内容就是上图 ... [详细]
  • 鼠标悬停出现提示信息怎么做
    概述–提示:指启示,提起注意或给予提醒和解释。在excel中会经常用到给某个格子增加提醒信息,比如金额提示输入数值或最大长度值等等。设置方式也有多种,简单的,仅为单元格插入批注就可 ... [详细]
  • 气象对比分析
    本文探讨了不同地区和时间段的天气模式,通过详细的图表和数据分析,揭示了气候变化的趋势及其对环境和社会的影响。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 深入理解ExtJS:从入门到精通
    本文详细介绍了ExtJS的功能及其在大型企业前端开发中的应用。通过实例和详细的文件结构解析,帮助初学者快速掌握ExtJS的核心概念,并提供实用技巧和最佳实践。 ... [详细]
  • 本文探讨如何在VueJS项目中通过配置vue.config.js文件实现多页面应用(MPA),特别是针对管理端和客户端的不同需求。 ... [详细]
  • 本文介绍如何使用 Bootstrap-table 插件实现表格中某一列数据的求和,并在表脚显示总计值。 ... [详细]
  • 本文详细介绍了利用JavaScript实现的五种不同的网页弹出窗口技术,包括全屏窗口、全屏模式窗口、带收藏链接工具栏的窗口、网页对话框及HTA窗口。 ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • 本文详细探讨了使用纯JavaScript开发经典贪吃蛇游戏的技术细节和实现方法。通过具体的代码示例,深入解析了游戏逻辑、动画效果及用户交互的实现过程,为开发者提供了宝贵的参考和实践经验。 ... [详细]
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社区 版权所有