博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
discuz防刷新、防外部提交研究
阅读量:5842 次
发布时间:2019-06-18

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

hot3.png

 防外部提交的做法

formhash值只要是为了防止灌水机从外部提交

DiscuzX2.5

/source/function/function_core.php

function formhash($specialadd = '') {	global $_G;	$hashadd = defined('IN_ADMINCP') ? 'Only For Discuz! Admin Control Panel' : '';	return substr(md5(substr($_G['timestamp'], 0, -7).$_G['username'].$_G['uid'].$_G['authkey'].$hashadd.$specialadd), 8, 8);}

首先,substr($_SGLOBAL['timestamp'], 0, -7),截取时间戳前3位。(是保证formhash在一定的时间里生效且不变,截取前3位,大概是115天。其实可以更短点),然后跟用户UID、md5后的sitekey等连接得出字符串,然后再md5,并截取字符串的8位。由于我们的sitekey是唯一的,再加上uid,而且都是MD5的,别人破解的机会几乎是0(不排除MD5以后会被完全破解)。别人无法仿造FORMHASH,就无法远程提交数据了。

Discuz防止重复提交的做法

原理:将用户第一次提交的时间记录缓存下来,当第二次提交与第一次提交的时间进行比较,如果小于设定的时间,这弹出提示并拒绝数据入库。当第二次提交时间减去第一次提交的时间大约设定的时间,则通过

PS:discuzX2.5支持redis,memcache,apc,xcache,eaccelerator五种格式的缓存,详见/source/class/discuz/discuz_memory.php

如果再没有开启redis和memcache,discuzX2.5默认采取将提交时间存入数据表的方式实现重复提交,在数据库中有一个数据表“pre_common_process”就是用来存储用户发布主题的时间的。

如何进行验证呢

以发帖为例

/source/include/post/post_newthread.php中的代码

if(checkflood()) { 	    showmessage('post_flood_ctrl', '', array('floodctrl' => $_G['setting']['floodctrl'])); } elseif(checkmaxperhour('tid')) {    showmessage('thread_flood_ctrl_threads_per_hour', '', array('threads_per_hour' => $_G['group']['maxthreadsperhour']));}

/source/function/function_cp.php

function checkflood() {    global $_G;    if(!$_G['group']['disablepostctrl'] && $_G['uid']) {        if($_G['setting']['floodctrl'] && discuz_process::islocked("post_lock_".$_G['uid'], $_G['setting']['floodctrl'])) {            return true;        }        return false;    }    return FALSE;}

/source/class/discuz/discuz_process.php用于对缓存的获取和设置

转载于:https://my.oschina.net/jiangbianwanghai/blog/68173

你可能感兴趣的文章
RedHat6 管理应用服务【11】
查看>>
stm32F10x复习-1
查看>>
20135226黄坤信息安全系统设计基础期末总结
查看>>
轻松快捷创建VSFTP虚拟用户
查看>>
[转]Javascript原型继承
查看>>
[转] vue异步处理错误
查看>>
CSS 3D动画概述菜鸟级解读之一
查看>>
分布式系列文章 —— 从 ACID 到 CAP / BASE
查看>>
方法签名与方法重载
查看>>
matlab进行地图仪的绘制
查看>>
Strawberry Perl CPAN Install Module 安装 Module 方法
查看>>
kindeditor.net应用
查看>>
函数preg_replace()与str_replace()
查看>>
Linux c括号作用域【原创笔记】
查看>>
用IPFS和以太坊存储数据
查看>>
Confluent平台5.0支持LDAP授权及用于IoT集成的MQTT代理
查看>>
诡异的xen故障:xenconsole: Could not read tty from store: No such file or directory
查看>>
HTTP工具CURL的使用简介
查看>>
选择“Asp.Net Web应用程序”还是“Asp.Net网站”?
查看>>
Server 2008 R2 AD RMS完整部署:准备篇
查看>>