香港独立IP空间
香港php空间
美国php空间
域名注册

虽然说现在论坛都已经出到的DiscuzX3.1版本了,但是有很多老站,当时使用的还是老版本的Discuz,一直就没有更新。这不,前段时间有个老版本的客户由于担心升级后,插件还有主题都不可以使用了,所以没升级。但是今天他发现了网站有一个问题,就是出现了下面的奇怪现象:完成(新手)任务后并发刷新页面可能会导致重复增加积分。

 

dz21 DiscuzX2.5版本任务模块刷积分漏洞解决办法

discuz刷积分截图

通过查询官网资料,无忧主机小编发现,这原来是老板Discuz的一个漏洞。

 

症状:当完成(新手)任务后并发刷新页面可能会导致重复增加积分

影响版本:Discuz 7 – Discuz X2.5 所有版本

 

 

解决方法是:

home_task.php 中的

$result = $tasklib->delete($id);

showmessage(‘task_deleted’, ‘home.php?mod=task&item=doing’);

替换成

if(!$_G[‘uid’]) {

showmessage(‘not_loggedin’, NULL, array(), array(‘login’ => 1));

}

 

$task = C::t(‘common_task’)->fetch($id);

if($task[‘available’] != 2) {

showmessage(‘task_nonexistence’);

} elseif(($task[‘starttime’] && $task[‘starttime’] > TIMESTAMP) || ($task[‘endtime’] && $task[‘endtime’] <= TIMESTAMP)) {

showmessage(‘task_offline’);

}elseif($task[‘tasklimits’] && $task[‘achievers’] >= $task[‘tasklimits’]) {

showmessage(‘task_full’);

}

$mytask = DB::fetch_first(“SELECT *, dateline AS applytime FROM %t where uid=%d AND taskid=”.$id,

array( ‘common_mytask’, $_G[‘uid’]));

if(!$mytask || $mytask[‘status’]!=0){

showmessage(‘task_not_underway’);

}else{

$task[‘applytime’] = $mytask[‘applytime’];

}

 

require_once libfile(‘task/’.$task[‘scriptname’], ‘class’);

$taskclassname = ‘task_’.$task[‘scriptname’];

$task_class = new $taskclassname;

if(method_exists($task_class, ‘csc’)) {

$result = $task_class->csc($task);

} else {

showmessage(‘task_not_found’, ”, array(‘taskclassname’ => $taskclassname));

}

if($result === TRUE || $result[‘csc’]) {

 

showmessage(‘task_doing’, ‘home.php?mod=task&do=view&id=’.$id);

} else {

$result = $tasklib->delete($id);

showmessage(‘task_deleted’, ‘home.php?mod=task&item=doing’);

}

class_task.php中

343行

} elseif($this->task[‘status’] != 0 ) {

替换成

} elseif($this->task[‘status’] != 0 || !$this->task[‘dateline’]) {

 

快捷方法是使用无忧小编已经修改好的文件,直接替换原来的文件即可。

文件路径

source/module/home/home_task.php

source/class/class_task.php

如此操作即可解决问题。

相关文章推荐阅读:

DZ安装不适合的插件引起应用报错提示“空间不支持CURL”

DISCUZ论坛首页的“最后发表”和“最后回复”设置伪静态的方法

DISCUZ更换域名后提示:REDIRECT URI IS ILLEGAL(100010)及解决办法

 

本文地址:http://www.51php.com/discuz/13940.html

喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

阅读本文的人还阅读:


搜索技术文档