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

本文介绍了一个PHP类,用于过滤和验证表单中的敏感字符,包括对不同类型的输入字段进行处理,如文本、密码、多选等,并提供了一组检测函数,例如长度检测、邮箱检测等,以确保数据的安全性和准确性。
摘要由CSDN通过智能技术生成

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

这篇文章主要介绍了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 "{$value}";

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("%srn"

,$select,preg_replace("/Y_/i",'',$varl),$_title);

break;

case 'radio':

if('Y' == $select)$select = 'checked';

$outform .= sprintf("%srn",

$_title,$select,$name,$varl,$style);

break;

case 'checkbox':

if('Y' == $select)$select = 'checked';

$outform .= sprintf("%srn",$_title,$select,$name,$varl,$style);

break;

}

$select =null;

}

}

// 下拉选择

if($type =='select')$outform = sprintf('%s',$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(" ",' '),array(" ",'< ?'),$str); //替换空格替换为

return $str;

}

// 转义

function ck_escape($str)

{

if (!get_magic_quotes_gpc())return addslashes($str);

return $str;

}

// MD5加密

public function ck_md5($str){

return MD5($str);

}

// base64加密

public function ck_base64($str){

return base64_encode($str);

}

// 时间

function ck_time($str){

// time_r() 来在公用函数文件

if(!is_numeric($str))

{

return time_r($str);

}

else return $str;

}

// 有条件注销(数字)

public function ck_cancel($str){

return (!is_numeric($str))? $str:"";

}

// 无条件注销

public function ck_delete(){

return null;

}

// js错误提示

private function jsError()

{

if(emptyempty($this->error))return false;

return "

rn for (i=0; i < error.length; i++){

rn document.getElementById(error[0]).innerHTML=error[1];

}rn

";

}

}

// 演示:

$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 '

';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值