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



推荐阅读
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 探讨了在用户浏览不同页面时,如何无缝循环播放背景音乐的技术方案,包括自动播放和跨页面状态保持。 ... [详细]
  • 本文详细探讨了JavaScript中的闭包与柯里化技术,这两者是函数式编程的重要组成部分,对提升代码的灵活性和可维护性具有重要作用。 ... [详细]
  • 我有这种ajax$.ajax({type:"POST",url:"bee_sesi_edit.php&# ... [详细]
  • 探讨在特定情况下使用 Knockout.js 的 if 或 visible 绑定的最佳实践,特别是在处理未定义对象时的策略。 ... [详细]
  • 本文探讨如何在VueJS项目中通过配置vue.config.js文件实现多页面应用(MPA),特别是针对管理端和客户端的不同需求。 ... [详细]
  • 本文介绍如何使用 Bootstrap-table 插件实现表格中某一列数据的求和,并在表脚显示总计值。 ... [详细]
  • 本文详细介绍了利用JavaScript实现的五种不同的网页弹出窗口技术,包括全屏窗口、全屏模式窗口、带收藏链接工具栏的窗口、网页对话框及HTA窗口。 ... [详细]
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社区 版权所有