博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Typecho添加验证码
阅读量:7137 次
发布时间:2019-06-28

本文共 3250 字,大约阅读时间需要 10 分钟。

0x01.关于

写Typecho主题时候碰到的问题,在登录时候添加验证码。

Typecho有很好的路由机制,并且MVC模型模块化做的很好。

系统代码在/var/中,包括了:Widget工具,Typecho模型等。

开发者二次开发代码在/usr/中,主要放置Theme主题,Plugins插件等。

添加验证码不能用插件形式,因此只能直接在源码中更改。

这里说两种验证码方式,,和用php生成图片两种方法。


0x02.Geetest极验

这个简单,到官网注册下账号。

1、按照极验的要求,修改前端代码,即,在/admin/login.php中添加代码。

2、添加Geetest插件,在/var/Widget/中添加Geetestlib.php

3、修改后台验证端,修改/var/Widget/Login.php如下:

require_once('Geetestlib.php');class Widget_Login extends Widget_Abstract_Users implements Widget_Interface_Do {    public function action() {        /*  此处...省略...字 */        /* 极验代码 */        $captcha_id = "xxxxxxxxxxxxx";//TODO: replace it with your own captcha's id        $private_key = "xxxxxxxxxxxxx";//TODO: replace it with your own captcha's key        $geetestlib = new GeetestLib($captcha_id,$private_key);        if (isset($_POST['geetest_challenge']) && isset($_POST['geetest_validate']) &&  isset($_POST['geetest_seccode'])) {            $validate_response = $geetestlib->geetest_validate(@$_POST['geetest_challenge'], @$_POST['geetest_validate'], @$_POST['geetest_seccode']);        }else{            $this->widget('Widget_Notice')->set("use your own captcha validate ");            $this->response->goBack();        }        if ($validate_response == TRUE) {        } else if ($validate_response == FALSE) {            $this->widget('Widget_Notice')->set('请先验证');            $this->response->goBack();        }else{            $this->widget('Widget_Notice')->set('FORBIDDEN');            $this->response->goBack();        }        /*  此处...省略...字 */ }

...部分代码,详细下载链接如下:


0x02.php生成图片

1、修改前端代码,修改/admin/login.php,添加如下:

2、添加php生成验证码的php插件,添加到/admin/typecho-code.php/admin/typecho-t1.ttf,代码下载:

3、修改后台验证代码,修改/var/Widget/Login.php如下:

session_start();$flag=true;class Widget_Login extends Widget_Abstract_Users implements Widget_Interface_Do {    public function action() {        /*  此处...省略...字 */        if (strtolower($_POST['verify']) != strtolower($_SESSION['verify']) ) {            /** 防止穷举,休眠3秒 */            sleep(3);            $this->widget('Widget_Notice')->set(_t('验证码错误!'), 'error');            $this->response->goBack('?referer=' . urlencode($this->request->referer));            $flag = false;        }else{            /** 如果验证码对了,开始验证用户 **/            $valid = $this->user->login($this->request->name, $this->request->password,            false, 1 == $this->request->remember ? $this->options->gmtTime + $this->options->timezone+30*24*3600 : 0);            /** 比对密码 */            if (!$valid) {                /** 防止穷举,休眠3秒 */                sleep(3);                $this->pluginHandle()->loginFail($this->user, $this->request->name,                $this->request->password, 1 == $this->request->remember);                Typecho_Cookie::set('__typecho_remember_name', $this->request->name);                $this->widget('Widget_Notice')->set(_t('用户名或密码无效'), 'error');                $this->response->goBack('?referer=' . urlencode($this->request->referer));            }            $this->pluginHandle()->loginSucceed($this->user, $this->request->name,            $this->request->password, 1 == $this->request->remember);        }        /*  此处...省略...字 */    }}

...部分代码,详细下载链接如下:


本文出自 ,转载请注明出处:

by 小草

2015-03-25 14:49:20

你可能感兴趣的文章
数据库事务的方方面面
查看>>
Python爬虫实战之爬取链家广州房价_01简单的单页爬虫
查看>>
Chrome 性能监测
查看>>
LocalDateTime和Date互相转换
查看>>
基于Serverless架构最新应用场景详解
查看>>
[BTCC] 要“工程师”“工程师”“工程师”
查看>>
阻塞IO
查看>>
信用算力实现金融级数据服务的实践
查看>>
Xcode配置测试环境和线上环境
查看>>
三大主流软件负载均衡器对比(LVS 、 Nginx 、Haproxy)
查看>>
学习技能总结:
查看>>
高可用集群----理论
查看>>
backtrack两种开启ssh方式
查看>>
redis 目录
查看>>
C语言中const的用法
查看>>
理解inode
查看>>
我的友情链接
查看>>
Delegates (Delegate, Func, Predicate, Action and Lambda)
查看>>
快速打开Windows的大部分程序
查看>>
SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache...
查看>>