帝国cms默认反馈提交的内容不受防火墙禁用字符限制,这里给出解决办法。 首先找到反馈处理文件:/e/class/q_functions.php 找到处理函数AddFeedback 分析发现这个函数没有加载防火墙变量,所

帝国CMS默认反馈提交的内容不受防火墙禁用字符限制,这里给出解决办法。

首先找到反馈处理文件:/e/class/q_functions.php

找到处理函数AddFeedback

分析发现这个函数没有加载防火墙变量,所以第一步就是把防火墙变量加载进来。

方法

将原代码
global $empire,$dbtbpre,$level_r,$public_r;

改为
global $empire,$dbtbpre,$level_r,$public_r,$ecms_config;

这个时候就加入了防火墙变量了。

然后我们找反馈内容字段

经分析

反馈字段是存在$br['enter']里面的,并用<!--record-->字符隔开了,所以我们只要在其循环中加入代码,请加在$f=$er1[1];下面,此处$f就是字段。
  if($f=="saytext")
  {
   $cleartext=explode(',',$ecms_config['fw']['cleargettext']);
   foreach($cleartext as $v)
   {
    $add[$f]=str_replace($v,"",$add[$f]);
   }
  }

就可以实现禁用字符的替换了。

代码解释:当提交的字段为saytext时启用防火墙,并把禁用字符替换为空。



整体函数代码:
//提交反馈信息

function AddFeedback($add){
global $empire,$dbtbpre,$level_r,$public_r,$ecms_config;
CheckCanPostUrl();//验证来源
if($add['bid'])
{
$bid=(int)$add['bid'];
}
else
{

  $bid=(int)getcvar('feedbackbid');

}

if(empty($bid))

{

  printerror("EmptyFeedbackname","history.go(-1)",1);

    }

//验证码

$keyvname='checkfeedbackkey';

if($public_r['fbkey_ok'])

{

  ecmsCheckShowKey($keyvname,$add['key'],1);

}

//版面是否存在

$br=$empire->fetch1("select bid,enter,mustenter,filef,groupid,checkboxf from {$dbtbpre}enewsfeedbackclass where bid='$bid';");

if(empty($br['bid']))

{

  printerror("EmptyFeedback","history.go(-1)",1);

}

//权限

if($br['groupid'])

{

  $user=islogin();

  if($level_r[$br[groupid]][level]>$level_r[$user[groupid]][level])

  {

   printerror("HaveNotEnLevel","history.go(-1)",1);

  }

}

$pr=$empire->fetch1("select feedbacktfile,feedbackfilesize,feedbackfiletype from {$dbtbpre}enewspublic limit 1");

//必填项

$mustr=explode(",",$br['mustenter']);

$count=count($mustr);

for($i=1;$i<$count-1;$i++)

{

  $mf=$mustr[$i];

  if(strstr($br['filef'],",".$mf.","))//附件

  {

   if(!$pr['feedbacktfile'])

   {

    printerror("NotOpenFBFile","",1);

   }

   if(!$_FILES[$mf]['name'])

   {

    printerror("EmptyFeedbackname","",1);

   }

  }

  else

  {

   $chmustval=ReturnFBCheckboxAddF($add[$mf],$mf,$br['checkboxf']);

   if(!trim($chmustval))

   {

    printerror("EmptyFeedbackname","",1);

   }

  }

}

$saytime=date("Y-m-d H:i:s");

//字段处理

$dh="";

$tranf="";

$record="<!--record-->";

$field="<!--field--->";

$er=explode($record,$br['enter']);

$count=count($er);

for($i=0;$i<$count-1;$i++)

{

  $er1=explode($field,$er[$i]);

  $f=$er1[1];

//屏蔽反馈提交的字符

  if($f=="saytext")

  {

   $cleartext=explode(',',$ecms_config['fw']['cleargettext']);

   foreach($cleartext as $v)

   {

    $add[$f]=str_replace($v,"",$add[$f]);

   }
  }

  //附件

  $add[$f]=str_replace('ecms','ecms',$add[$f]);

  if(strstr($br['filef'],",".$f.","))

  {

   if($_FILES[$f]['name'])

   {

    if(!$pr['feedbacktfile'])

    {

     printerror("NotOpenFBFile","",1);

    }

    $filetype=GetFiletype($_FILES[$f]['name']);//取得文件类型

    if(CheckSaveTranFiletype($filetype))

    {

     printerror("NotQTranFiletype","",1);

    }

    if(!strstr($pr['feedbackfiletype'],"|".$filetype."|"))

    {

     printerror("NotQTranFiletype","",1);

    }

    if($_FILES[$f]['size']>$pr['feedbackfilesize']*1024)//文件大小

    {

     printerror("TooBigQTranFile","",1);

    }

    $tranf.=$dh.$f;

    $dh=",";

    $fval="ecms".$f."-@!]";

   }

   else

   {

    $fval="";

   }

  }

  else

  {

   $add[$f]=ReturnFBCheckboxAddF($add[$f],$f,$br['checkboxf']);

   $fval=$add[$f];

  }

  $addf.=",`".$f."`";

  $addval.=",'".addslashes(RepPostStr($fval))."'";

}

$type=0;

$classid=0;

$filename='';

$filepath='';

$userid=(int)getcvar('mluserid');

$username=RepPostVar(getcvar('mlusername'));

$filepass=ReturnTranFilepass();

//上传附件

if($tranf)

{

  $dh="";

  $tranr=explode(",",$tranf);

  $count=count($tranr);

  for($i=0;$i<$count;$i++)

  {

   $tf=$tranr[$i];

   $tfr=DoTranFile($_FILES[$tf]['tmp_name'],$_FILES[$tf]['name'],$_FILES[$tf]['type'],$_FILES[$tf]['size'],$classid);

   if($tfr['tran'])

   {

    $filepath=$tfr[filepath];

    //写入数据库

    $filetime=$saytime;

    $filesize=(int)$_FILES[$tf]['size'];

    eInsertFileTable($tfr[filename],$filesize,$tfr[filepath],'[Member]'.$username,$classid,'[FB]'.addslashes(RepPostStr($add[title])),$type,$filepass,$filepass,$public_r[fpath],0,4,0);

    $repfval=($tfr[filepath]?$tfr[filepath].'/':'').$tfr[filename];

    $filename.=$dh.$tfr[filename];

    $dh=",";

   }

   else

   {

    $repfval="";

   }

   $addval=str_replace("ecms".$tf."
-@!]",$repfval,$addval
);

  }

}

$ip=egetip();

$sql=$empire->query("insert into {$dbtbpre}enewsfeedback(bid,saytime,ip,filepath,filename,userid,username,haveread".$addf.") values('$bid','$saytime','$ip','$filepath','$filename','$userid','$username',0".$addval.");");

$fid=$empire->lastid();

//更新附件

UpdateTheFileOther(4,$fid,$filepass,'other');

ecmsEmptyShowKey($keyvname);//清空验证码

if($sql)

{

  $reurl=DoingReturnUrl("../tool/feedback/?bid=$bid",$add['ecmsfrom']);

  printerror("AddFeedbackSuccess",$reurl,1);

}

else

{printerror("DbError","history.go(-1)",1);}

}
转载请说明出处
知优网 » 开启帝国CMS反馈防火墙禁用字符的方法

发表评论

您需要后才能发表评论