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官方能尽快给出官方解释解决这个问题~~缓存

相关文章
相关标签/搜索