0

0

php 过滤敏感字符类实例代码

怪我咯

怪我咯

发布时间:2017-07-14 10:08:23

|

2550人浏览过

|

来源于php中文网

原创

所谓的敏感字符是指:在文章中含有不健康或反动类的信息,影响社会的信息,就会被视为敏感字符。因为有时候用户输入的敏感字符会无形中影响了程序的正确执行,著名的数据库注入攻击就是 在查询条件里面添加 数据库的控制指令,从而达到攻击者的目的。

这篇文章主要介绍了php表单敏感字符过滤类及其用法实例,详细分析了表单生成与提交等环节针对敏感字符的过滤功能,是非常实用的技巧,需要的朋友可以参考下,具体分析如下:

php的表单敏感字符过滤类
php的表单敏感字符过滤类

php的表单敏感字符过滤类

下载
/** 
* 表单生成验证文件 
*/ 
$_form = new formHtmlFind(); 
class formHtmlFind{ 
        /** 
         * 输出表单函数 
         * $formKey  表单键 
         * $infoArray 更新时的原始信息数组 
         */ 
 
        public function formHtml($array,$infoArray='') 
        { 
                // 检测数组是否存在 
                if(emptyempty($array))return false; 
                $newform = null; 
                // 信息数组(更新信息) 
                $this->infoArray = !emptyempty($infoArray)?$infoArray:array(); 
                $this->array['class'] =  get_class_methods(get_class()); 
                foreach ($array as $key =>$arr) 
                { 
                        // 键值转换为纯英文 
                        $key = preg_replace("/[^a-z]/i",'',$key); 
                        // 生成表单 
                        $newform .= $this->outputForm($arr,$key); 
                } 
                // 输出表单 
                return $newform.$this->jsError(); 
        } 
        /** 
         * 生成表单函数 
         */ 
        private function outputForm($arr,$key) 
        { 
                $value = null; 
                if(emptyempty($arr))return false; 
                // input Type 
                $type   = $key; 
                // input NAME 
                $name   = trim($arr[0]); 
                // input 初始值 不包含多选,单选类 
                $value  = (!emptyempty($this->infoArray[$name]))? trim($this->infoArray[$name]):trim($arr[1]); 
                $value  = emptyempty($this->post[$name])? $value :trim($this->post[$name]); 
                // input Title 
                $title  = trim($arr[2]); 
                // 样式 
                $style  = trim($arr[3]); 
                if($key!=="hidden") 
                { 
                        $dt = "
{$title}
"; // js错误提示 $dd = "
rn"; } return (!preg_match("/checkbox|select|radio/i",$key))? $dt.$this->newInput($type,$name,$value,$style,$title).$dd: $this->formSelect($type,$name,$arr[1],$title,$style); // 多选类 } /** * 提交数据检测 */ public function postForm($array) { // 检测数组是否存在 if(emptyempty($array)||emptyempty($_POST))return false; $this->post = $_POST; $this->array['class'] = get_class_methods(get_class()); foreach ($array as $key =>$arr) { // 键值转换为纯英文 $key = preg_replace("/[^a-z]/i",'',$key); // 检测 注销file类表单 if (!emptyempty($arr)&&'file' != $key)$newData[trim($arr[0])] = $this->postFind($arr,$key); } // 输出表单 if(!emptyempty($this->error)) { return false; } else return $newData; } /** * 生成表单 */ private function newInput($type,$name,$value,$style,$title) { switch ($type) { case 'text': // 单行文本 return ""; break; case 'password': //密码输入 return ""; break; case '': //多行文本 return ""; break; case 'hidden': // 隐藏 return ""; break; case 'file': // 文件上传 return ""; break; case 'submit': // 提交 return ""; break; default: return "{$type}类型错误!!!"; break; } } /** * 提交信息检测 * 错误返回error */ private function postFind($arr,$key) { if(emptyempty($arr))return false; $name = $title =$error =$find =$standard =null; // input NAME $name = trim($arr[0]); // input Title $title = trim($arr[2]); // 错误提示 $error = trim($arr[4]); // 检测类型 Y N $find = trim($arr[5]); // 检测标准 $standard = trim($arr[6]); // if(!emptyempty($standard))$this->error .=$this->ck_split($standard,$name,$title,$find,$error); // 转换为字符串 if(is_array($this->post[$name]))$this->post[$name] = implode(",",$this->post[$name]); // 转义或其他转化 $KKarray = array(); if(preg_match("/Y|N/is",$find)) { $KKarray = split("_", $find); // 转义或过滤 $escape_filter = (!emptyempty($KKarray[1]))?'ck_'.$KKarray[1]:''; // 输出通过检测的合法数据 $data = ($escape_filter)?$this->$escape_filter($this->post[$name]):$this->post[$name]; } else $data = ""; // 输出新的数据 return $data; } /** * 多选类表单生成 */ private function formSelect($type,$name,$value,$title,$style) { $outform = null; // 触发更新和提交动作时的初始 $nowvalue = (!emptyempty($this->post[$name]))?$this->post[$name]:$this->infoarray[$name]; // 兼容多选的识别,转为数组 if(!emptyempty($nowvalue))$valueArray = explode(",",$nowvalue); // 选项标题 if(is_array($title)) { array_unshift($title,'选择'); $titarray = array_values($title); }else $titarray = explode("|",$title); // 选项值 if(is_array($value)) { array_unshift($value,'选择'); $valarray = array_keys($value); if(emptyempty($title))$titarray = array_values($value); } else $valarray = explode("|",$value); // 取消表单的初始默认值 if(!emptyempty($this->post)&&!emptyempty($this->infoArray))$value = preg_replace("/Y_/i",'',$value); foreach ($valarray as $key =>$varl) { // 非默认的识别 if(!emptyempty($valueArray))$select = (in_array($varl,$valueArray))?'Y':''; // 判断是否为默认 else $select = (eregi("Y_",$varl))? 'Y':''; if($key >'0') { $_title=($titarray[$key])? $titarray[$key]:$title; switch ($type) { case 'select': if('Y' == $select)$select = 'selected'; $outform .= sprintf("rn" ,$select,preg_replace("/Y_/i",'',$varl),$_title); break; case 'radio': if('Y' == $select)$select = 'checked'; $outform .= sprintf("rn", $_title,$select,$name,$varl,$style); break; case 'checkbox': if('Y' == $select)$select = 'checked'; $outform .= sprintf("rn",$_title,$select,$name,$varl,$style); break; } $select =null; } } // 下拉选择 if($type =='select')$outform = sprintf('',$name,$style,$outform); return sprintf("
%s
%s
rn",$titarray[0],$outform,$name); } /** * 表单验证 及全部 ck_类函数 */ private function ck_split($standard,$name,$title,$find,$error) { // 非必填缺省跳过 if(eregi('N',$find) && emptyempty($this->post[$name]))return false; // 必填缺省检测 if(eregi('Y',$find) && emptyempty($this->post[$name]))return "["J{$name}","$error"],"; $t_error = null; // 多项检测 $arr = explode(',',$standard); // POST数据检测 if(!emptyempty($arr))foreach ($arr as $var) { if(trim($var)!='') { switch ($this->post) { case is_array($this->post[$name]): // 数组类的检测 foreach ($this->post[$name] as $_var) { $t_error.= ($this->ck_open($_var,trim($var)))?"":$error; if($t_error)break; } break; default: $t_error.= ($this->ck_open($this->post[$name],trim($var)))?"":$error; break; } if($t_error)break; } } return ($t_error)? "["J{$name}","$t_error"],":""; } // 函数调用 private function ck_open($string,$str) { $functi = $this->ck_detected($str); return ($this->$functi($string,$str))? true:false; } // 类型判断 private function ck_detected($str) { $detect = (eregi("^[a-zA-Z]*$",$str))? "{$str}Detect":'lengthDetect'; if(!in_array($detect,$this->array['class'])) { location('index.php',$ck,' Lack of function !!!'); } return $detect; } //-------------------------------------以下为检测函数可外部调用 // 长度 public function lengthDetect($string,$str){ $len = split('-',trim($str)); return (strlen($string) > ($len[0]-1) && strlen($string) < ($len[1]+1))? true:false; } // 价格 public function moneyDetect($str){ return preg_match("/^(-|+)?d+(.d+)?$/",$str); } // 邮件 public function emailDetect($str){ return preg_match("/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/", $str); } // 网址 public function urlDetect($str){ return preg_match("/^http://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-&_~`@[]':+!]*([^<>"])*$/", $str); } // 数字型 public function numDetect($str){ return is_numeric($str); } // 中文 public function cnDetect($str){ return preg_match("/^[x7f-xff]+$/", $str); } // 字母 public function enDetect($str){ return preg_match("/^[A-Za-z]+$/", $str); } // 数字字母混合 public function numenDetect($str){ return preg_match("/^([a-zA-Z0-9_-])+$/",$str); } // 电话号码 public function telDetect($str){ return ereg("^[+]?[0-9]+([xX-][0-9]+)*$", $str); } // 敏感词 public function keyDetect($str){ return (!preg_match("/$badkey/i",$str)); } //-----------------------------------------------------输出 // 字符替换 public function ck_filter($str){ $str=(is_array($str))? implode(",",$str):$str; $str=nl2br($str); //将回车替换为
$str=htmlspecialchars($str); //将特殊字元转成 HTML 格式。 //$str=str_replace(array(" ",'error))return false; return " "; } } // 演示: $form[1] =array( 'text'=>array('title','','产品名称','size=40','产品名称不可缺少!','Y','cn,1-30'), 'text1'=>array('categories','','产品名称','','','Y_base64'), 'select'=>array('superiors','||1|2|Y_3','产品类别|选择|1|2|3','','必选项','Y'), 'radio'=>array('superiors1','|1|Y_2|3','产品xun|产品1|产品2|产品3','','必选项','Y'), 'checkbox'=>array('superiors2',array(1=>'11',2=>'22',3=>'33'),'','','必选项','Y'), 'file'=>array('ddd','','文件'), ); $form =array ( 'login' => array ( 'text' => array ( 0 => 'user', 1 => '', 2 => '用户名', 3 => 'size=20', 4 => '!', 5 => 'Y', 6 => 'numen,6-12', ), 'password' => array ( 0 => 'pass', 1 => '', 2 => '密 码', 3 => 'size=22', 4 => '密码格式错误!', 5 => 'Y_md5', 6 => 'numen,6-12', ), 'radio' => array ( 0 => 'time', 1 => '|7200|3600|1800', 2 => 'cookies有效时间|2小时|1小时|30分钟', 3 => '', 4 => '', 5 => 'N_delete', 6 => '', ), ), ); // 表单提交效验 $past = $_form->postForm($form['login']); $dd = array('title'=>'标题','categories'=>'类别'); // $dd 为已有的信息(如更新时的信息输出) POST数据位内部处理具有优先权 if(!emptyempty($past)) { echo "
"; 
        print_r($past); 
        echo"
";  }  echo '
';  echo $_form->formHtml($form['login'],$dd);  echo '
';

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

2

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

25

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

622

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 10.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号