野生大熊猫

Discuz 系统验证码调用最简单的方法
一、验证码初始化这几行代码写到php文件中去。$seccodecheck = 1; $sechash = 'S'....
扫描右侧二维码阅读全文
07
2018/08

Discuz 系统验证码调用最简单的方法

一、验证码初始化

这几行代码写到php文件中去。

$seccodecheck = 1;
$sechash = 'S'.$_G['sid'];
$seccheckhtml = "<span id=\"seccode_c$sechash\"></span><script type=\"text/javascript\">updateseccode('c$sechash', '<br /><sec> <sec> <sec>', 'admin');</script>";

二、验证码调用

需要的是调用$seccheckhtml变量。将$seccheckhtml写到对应插件的html文件中。
其实前端就是放个js函数:

updateseccode('c$sechash', '<br /><sec> <sec> <sec>', 'admin');

三、验证码判断

然后这边需要验证码判断,我们找到了表单提交验证的判断函数:

    public static function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) {
        if(!getgpc($var)) {
            return FALSE;
        } else {
            global $_G;
            if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_GET['formhash']) && $_GET['formhash'] == formhash() && empty($_SERVER['HTTP_X_FLASH_VERSION']) && (empty($_SERVER['HTTP_REFERER']) ||
                strncmp($_SERVER['HTTP_REFERER'], 'http://wsq.discuz.com/', 22) === 0 || preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])))) {
                if(checkperm('seccode')) {
                    if($secqaacheck && !check_secqaa($_GET['secanswer'], $_GET['secqaahash'])) {
                        showmessage('submit_secqaa_invalid');
                    }
                    if($seccodecheck && !check_seccode($_GET['seccodeverify'], $_GET['seccodehash'], 0, $_GET['seccodemodid'])) {
                        showmessage('submit_seccode_invalid');
                    }
                }
                return TRUE;
            } else {
                showmessage('submit_invalid');
            }
        }
    }

可以得知第三个参数$seccodecheck为是否判断验证码。所以可以这样写:

if (submitcheck('deposit_submit',0,1)){}

其他

其实这些方法万变不离其宗:
观察js函数:updateseccode('c$sechash', '<br /><sec> <sec> <sec>', 'admin');
第一个参数是id,这个作为显示,更新验证码使用。
第二个参数为模板(自己取的名字),可以通过这个修改验证码当时。而<sec>类似于占位符

方法一:

下面这种样式就是通过修改js函数的第二个参数,在发帖的时候可以找到:
TIM截图20180808003123.png

$sectpl = '<sec> <span id="sec<hash>" onclick="showMenu(this.id)"><sec></span><div id="sec<hash>_menu" class="p_pop p_opt" style="display:none"><sec></div>';

方法二:

这种方法可以直接显示,在用户修改密码出可以找到

TIM截图20180808003212.png

$sectpl = '<table cellspacing="0" cellpadding="0" class="tfm"><tr><th><sec> :</th><td><sec><p class="d"><sec></p></td></tr></table>';
Last modification:August 8th, 2018 at 12:44 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment