国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > CMS > PhpCMS > 正文

解決phpcms評論跳轉的bug問題

2024-09-10 07:16:13
字體:
來源:轉載
供稿:網友

phpcms內容頁評論有個bug,當發布評論之后,跳轉到“完整評論列表”的頁面,而不是回到當前評論框的頁面,后來phpcms的一次升級修復了這個bug.

這種小問題卻非常讓人頭疼,讓我們來分析一下這個bug是怎么產生的?

phpcms是通過iframe一個評論頁面到內容頁實現評論功能的,這個評論頁面的表單,提交到{APP_PATH}index.php?m=comment&c=index&a=post&commentid={$commentid}進行處理.

我們可以到comment模塊的index控制器的post方法查看,看到_show_msg()方法,它又調用了showmessage()方法,showmessage()引入了提示模板,代碼如下:

  1. function showmessage($msg$url_forward = 'goback'$ms = 600, $dialog = '') { 
  2. if(defined('IN_ADMIN')) { 
  3. include(admin::admin_tpl('showmessage''admin')); 
  4. else { 
  5. include(template('content''message')); 
  6. exit

然后我們打開模板下content下的message模板頁面,頁面的跳轉都是它來實現的,代碼如下:

<a href="{remove_xss($url_forward)}">如果您的瀏覽器沒有自動跳轉,請點擊這里</a>

問題就在這里remove_xss(),我們看看remove_xss()方法,代碼如下:

  1. $parm1 = Array('javascript''vbscript''expression''applet''meta''xml''blink''link''script''embed''object''iframe''frame''frameset''ilayer''layer''bgsound''title''base'); 
  2.  
  3.  $parm2 = Array('onabort''onactivate''onafterprint''onafterupdate''onbeforeactivate''onbeforecopy''onbeforecut''onbeforedeactivate''onbeforeeditfocus''onbeforepaste''onbeforeprint''onbeforeunload''onbeforeupdate''onblur''onbounce''oncellchange''onchange''onclick''oncontextmenu''oncontrolselect''oncopy''oncut''ondataavailable''ondatasetchanged''ondatasetcomplete''ondblclick''ondeactivate''ondrag''ondragend''ondragenter''ondragleave''ondragover''ondragstart''ondrop''onerror''onerrorupdate''onfilterchange''onfinish''onfocus''onfocusin''onfocusout''onhelp''onkeydown''onkeypress''onkeyup''onlayoutcomplete''onload''onlosecapture''onmousedown''onmouseenter''onmouseleave''onmousemove''onmouseout''onmouseover''onmouseup''onmousewheel''onmove''onmoveend''onmovestart''onpaste''onpropertychange''onreadystatechange''onreset''onresize''onresizeend''onresizestart''onrowenter''onrowexit''onrowsdelete''onrowsinserted''onscroll''onselect''onselectionchange''onselectstart''onstart''onstop''onsubmit''onunload');  

這里只是節選,發現它把帶有iframe的html給過濾掉了,這樣跳轉到之前的頁面/index.php?m=comment&c=index&a=init&commentid=content_13-20-1&iframe=1,這里的iframe就不見了,再看看init方法,代碼如下:

  1. if (isset($_GET['iframe'])) { 
  2.  if (strpos($url,APP_PATH) === 0) { 
  3.   $domain = APP_PATH; 
  4.  } else { www.111cn.net 
  5.   $urls = parse_url($url); 
  6.   $domain = $urls['scheme'].'://'.$urls['host'].(isset($urls['port']) && !emptyempty($urls['port']) ? ":".$urls['port'] : '').'/'
  7.  } //開源軟件:Vevb.com 
  8.  include template('comment''show_list'); 
  9. else { 
  10.  include template('comment''list'); 

恍然大悟了,當iframe存在的時候,就調用show_list頁面,否則就是“查看全部評論”的頁面.

修改方法:

把message頁面提示模板的remove_xss方法改成trim_script()方法,代碼如下:

  1. function trim_script($str) { 
  2.  if(is_array($str)){ 
  3.   foreach ($str as $key => $val){ 
  4.    $str[$key] = trim_script($val); 
  5.   } 
  6.   }else
  7.    $str = preg_replace ( '//<([//]?)script([^/>]*?)/>/si''&lt;//1script//2&gt;'$str ); 
  8.   $str = preg_replace ( '//<([//]?)iframe([^/>]*?)/>/si''&lt;//1iframe//2&gt;'$str ); 
  9.   $str = preg_replace ( '//<([//]?)frame([^/>]*?)/>/si''&lt;//1frame//2&gt;'$str ); 
  10.   $str = str_replace ( 'javascript:''javascript:'$str ); 
  11.   } 
  12.  return $str
  13. }  

用這個方法進行安全過濾.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 胶南市| 崇左市| 淄博市| 安阳县| 陕西省| 罗江县| 乐平市| 浦县| 宣化县| 嫩江县| 嵊泗县| 上虞市| 青海省| 天峨县| 石柱| 吐鲁番市| 永寿县| 罗甸县| 土默特右旗| 田东县| 平远县| 长海县| 垫江县| 青海省| 太谷县| 四平市| 吉水县| 青冈县| 张家口市| 三明市| 巴塘县| 潞城市| 新乡县| 汉中市| 凤庆县| 开江县| 深州市| 满洲里市| 都江堰市| 温州市| 个旧市|