Discuz!X3.2驗證沒法顯示臨時解決方案

最近給公司搭建了一個Discuz站點,但是發現驗證碼沒法顯示。而後拿本身網站檢查了一下,發現也有同樣的問題,嘗試在新標籤中打開驗證碼,發現頁面顯示:Access Denied。 OK,那麼就是程序中某些問題致使了頁面被打斷。網上搜索了一下,發現這個問題從X3.1開始就存在了,網上教的都是在後臺的「防灌水->驗證設置->驗證碼類型」中選擇其中一項,並清除緩存。 顯然,這辦法兵沒有奏效。並且個人網站在X3.0的時候就已經選擇過驗證碼類型,問題也依然存在。 因而嘗試從代碼開始着手,驗證碼的URL以下: http://論壇地址/misc.php?mod=seccode&update=46484&idhash=cSZrt0CM 從mod這個參數中可得知處理驗證碼的文件是source/module/misc/misc_seccode.php。打開這個文件,經過逐行插入斷點的方式查找意外跳出的代碼,最終將問題定位到了第94-96行。php

// if($_G['setting']['seccodedata']['type'] < 2 && ($refererhost['host'] != $_SERVER['HTTP_HOST']) || $_G['setting']['seccodedata']['type'] == 2 && !extension_loaded('ming') && $_POST['fromFlash'] != 1 || $_G['setting']['seccodedata']['type'] == 3 && $_GET['fromFlash'] != 1) {
	// 	exit('Access Denied');
	// }

正是這段判斷不經過而致使驗證碼顯示的過程被中斷。時間所迫,我沒對這段判斷的邏輯作過多的分析,粗略看一下大概這是一段用於安全的判斷,究竟是它邏輯有誤仍是個人配置問題我也沒能花時間一一分析,有興趣的朋友能夠作一下詳細的分析吧~~ 問題定位到了,那麼我直接註釋這段代碼吧。代碼註釋事後,驗證碼正常顯示,問題解決。 固然這並非最完善的解決方式,我這作法不過是繞過了本應有的判斷問題。也但願Discuz官方能儘快給出官方解釋解決這個問題~~緩存

相關文章
相關標籤/搜索