您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
discuz代码logging.php分析
高季晨2025-07-06Discuz教程已有人查阅
导读//定义操作页面define('CURscrīpt', 'logging');//包含公共文件define('CURscrīpt', 'loggin
<?php
//定义操作页面
define('CURscrīpt', 'logging');
//包含公共文件
require_once './include/common.inc.php';
//包含misc函数文件
require_once DISCUZ_ROOT.'./include/misc.func.php';
//判断动作
//注销
if($action == 'logout' && !empty($formhash) && $formhash == FORMHASH) {
//清除cookies
clearcookies();
//重置用户状态为游客
$groupid = 7;
$discuz_uid = 0;
//清除用户名密码
$discuz_user = $discuz_pw = '';
//重置页面样式
$styleid = $_DCACHE['settings']['styleid'];
//显示注销成功页面
showmessage('logout_succeed', dreferer());
}
//登陆
elseif($action == 'login') {
//判断用户是否为游客
if($discuz_uid) {
//显示登陆成功页面
showmessage('login_succeed', $indexname);
}
//登陆用户名的字段名
$field = isset($loginfield) && $loginfield == 'uid' ? 'uid' : 'username';
//验证码检查
//get secure code checking status (pos. -2)
$seccodecheck = substr(sprintf('%05b', $seccodestatus), -2, 1);
//判断是否为提交登陆
if(!submitcheck('loginsubmit', 1, $seccodecheck)) {
//显示登陆页面
$discuz_action = 6;
$referer = dreferer();
$thetimenow = '(GMT '.($timeoffset > 0 ? '+' : '').$timeoffset.') '.
gmdate("$dateformat $timeformat", $timestamp + $timeoffset * 3600).
$styleselect = '';
$query = $db->query("SELECT styleid, name FROM {$tablepre}styles WHERE available='1'");
while($styleinfo = $db->fetch_array($query)) {
$styleselect .= "<option value=\"$styleinfo[styleid]\">$styleinfo[name]</option>\n";
}
$_DCOOKIE['cookietime'] = isset($_DCOOKIE['cookietime']) ? $_DCOOKIE['cookietime'] : 2592000;
$cookietimecheck = array((isset($_DCOOKIE['cookietime']) ? intval($_DCOOKIE['cookietime']) : 2592000) => 'checked');
if($seccodecheck) {
$seccode = random(4, 1);
}
include template('login');
} else {
//处理登陆
//用户信息置空
$discuz_uid = 0;
$discuz_user = $discuz_pw = $discuz_secques = $md5_password = '';
$member = array();
//判断是否被限制登陆,返回0,1,2,3。声明在misc.func.php
$loginperm = logincheck();
if(!$loginperm) {
//显示限制登陆
showmessage('login_strike');
}
//安全提问处理,返回一串字符或空。声明在global.func.php
$secques = quescrypt($questionid, $answer);
//判断是否安全提问页面登陆
if(isset($loginauth)) {
$field = 'username';
$password = 'VERIFIED';
list($username, $md5_password) = explode("\t", authcode($loginauth, 'DECODE'));
} else {
$md5_password = md5($password);
$password = preg_replace("/^(.{".round(strlen($password) / 4)."})(.+?)(.{".round(strlen($password) / 6)."})$/s", "http:// .cnblogs.com/kuyuecs/admin/file://1***//3", $password);
}
//查询数据表members,usergroups
$query = $db->query("SELECT m.uid AS discuz_uid, m.username AS discuz_user, m.password AS discuz_pw, m.secques AS discuz_secques,
m.adminid, m.groupid, m.styleid AS styleidmem, m.lastvisit, m.lastpost, u.allowinvisible
FROM {$tablepre}members m LEFT JOIN {$tablepre}usergroups u USING (groupid)
WHERE m.$field='$username'");
//取出用户认证信息包括UID,用户名,密码,安全提问,管理权限,用户组ID,页面风格,上次访问,之后发帖,是否允许隐身
$member = $db->fetch_array($query);
//验证登陆
if($member['discuz_uid'] && $member['discuz_pw'] == $md5_password) {
//验证安全提问
if($member['discuz_secques'] == $secques) {
//安全提问匹配
//从数组中将变量导入到当前的符号表
extract($member);
//处理用户名
$discuz_userss = $discuz_user;
$discuz_user = addslashes($discuz_user);
//判断隐身模式
if(($allowinvisible && $loginmode == 'invisible') || $loginmode == 'normal') {
//更新members表用户现在的模式:隐身或普通
$db->query("UPDATE {$tablepre}members SET invisible='".($loginmode == 'invisible' ? 1 : 0)."' WHERE uid='$member[discuz_uid]'", 'UNBUFFERED');
}
$styleid = intval(empty($_POST['styleid']) ? ($styleidmem ? $styleidmem :
$_DCACHE['settings']['styleid']) : $_POST['styleid']);
$cookietime = intval(isset($_POST['cookietime']) ? $_POST['cookietime'] :
($_DCOOKIE['cookietime'] ? $_DCOOKIE['cookietime'] : 0));
//写cookie
dsetcookie('cookietime', $cookietime, 31536000);
dsetcookie('auth', authcode("$discuz_pw\t$discuz_secques\t$discuz_uid", 'ENCODE'), $cookietime);
$sessionexists = 0;
//判断是否为等待验证会员
if($groupid == 8) {
showmessage('login_succeed_inactive_member', 'memcp.php');
} else {
showmessage('login_succeed', dreferer());
}
} elseif(empty($secques)) {
//安全提问不匹配且安全提问不为空
$username = dhtmlspecialchars($member['discuz_user']);
$loginmode = dhtmlspecialchars($loginmode);
$styleid = intval($styleid);
$cookietime = intval($cookietime);
//加密已接受的用户名和密码
$loginauth = authcode(addslashes($member['discuz_user'])."\t".addslashes($member['discuz_pw']), 'ENCODE');
//显示回答安全提问
include template('login_secques');
dexit();
}
}
//生成密码错误日志记录
$errorlog = "<?PHP exit('Access Denied'); ?>\t".$timestamp."\t".
dhtmlspecialchars($member['discuz_user'] ? $member['discuz_user'] : stripslashes($username))."\t".
$password."\t".
($secques ? "Ques #".dhtmlspecialchars($questionid) : '')."\t".
$onlineip."\n";
loginfailed($loginperm);
//日志记录加入日志文件
@$fp = fopen(DISCUZ_ROOT.'./forumdata/illegallog.php', 'a');
@flock($fp, 2);
@fwrite($fp, $errorlog);
@fclose($fp);
//显示登陆出错页面
showmessage('login_invalid', NULL, 'HALTED');
}
}
else {
showmessage('undefined_action');
}
?>
本文标签:
很赞哦! ()
相关教程
图文教程
在CentOS6上怎么安装Discuz! X2.5
简明过程1. 参考但是,实际上可以不用这么复杂。而且由于nginx配置php比较费劲,之后用apache解决了。
Discuz & UCenter修改手记
最近在整JAVA和UCENTER的东西,受限于项目架构需要,无法完全以UCENTER为中心,所以在对接过程中遇到了许多不愉快的事情。经历多番研究,终于解决了其中了两个大问题
Discuz! X系列UC_Server本地文件包含漏洞
最近又发现discuz论坛被挂马了,决定好好研究一下discuz的漏洞,技术债始终要还是要还的快要睡觉的时候,突然收到一封邮件,发现服务器上的文件被篡改了,立即登录服务器,清空恶意文件,
discuz x3.1论坛搬家换域名的方法
请关闭论坛,尤其是数据备份和还原时请不要操作论坛。进入后台→站长→数据库→备份,备份成功以后,数据保存在 data/backup_**。
相关源码
-
(自适应)简繁双语机械矿山矿石五金设备pbootcms源码下载本模板基于PbootCMS开发,主要面向机械五金、矿山矿石设备等行业,支持简体中文和繁体中文双语切换。采用响应式布局技术,确保在各种设备上都能获得良好的浏览体验。模板设计注重展示工业设备的专业性和技术特点,帮助企业建立可靠的线上展示平台。查看源码 -
(PC+WAP)蓝色不锈钢簧线金属制品营销型pbootcms网站模板本模板基于PbootCMS内核开发,为不锈钢及金属制品企业量身打造。采用响应式设计,适配PC与移动设备,提供统一后台管理体验,数据实时同步更新。查看源码 -
(自适应)绿色农业大型机械设备展示网站模板下载基于PbootCMS内核深度定制开发的农业机械行业专用模板。针对农机设备展示、产品参数说明等需求优化设计,突出农业机械行业特性查看源码 -
(响应式)wordpress模板VieuV4.5主题资讯自媒体博客源码Vieu主题专注于个人博客与企业展示场景,采用响应式设计确保在手机、电脑、平板等多设备上的展示。主题集成会员中心、投稿系统、内容保护等实用功能,满足现代博客网站的建设需求。查看源码 -
帝国cms7.5个人博客资讯文章模板下载本模板简洁个人博客网站设计开发,采用帝国CMS内核构建,只需替换文字图片即可快速搭建专业网站。自适应手机端设计,数据实时同步,操作简单便捷。PHP程序确保安全稳定运行,帮助您以较低成本获取持续业务。查看源码 -
(自适应)五金配件机械加工设备pbootcms模板免费下载这款基于PbootCMS开发的网站模板为五金配件和机械加工行业设计,采用简洁有力的设计风格,突出工业产品的专业性和可靠性。模板结构清晰,功能完善,能够有效展示各类工业产品的技术参数和应用场景。查看源码
| 分享笔记 (共有 篇笔记) |
