logging.php

<?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", "//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');
}
?>

DISCUZ代码分析相关推荐

  1. 管理Discuz!代码分析的收集整理

    管理Discuz!代码分析的收集整理 1.后台结构 @�L^SD+k#G0 后台首页提供了常用操作:用户(组)编辑,论坛基本备份等. k XS7]+mB8H0 2.PHPChina 开源社区门户&qu ...

  2. Discuz代码分析——index.php

    /*     [Discuz!] (C)2001-2007 Comsenz Inc.     This is NOT a freeware, use is subject to license ter ...

  3. Discuz代码研究-编码规范

    来源:http://www.cnblogs.com/janas/archive/2013/08/20/3271408.html Discuz中的编码规范很值得PHP开发人员借鉴.里面既介绍了编码时代码 ...

  4. 20145236《网络攻防》Exp4 恶意代码分析

    20145236<网络攻防>Exp4 恶意代码分析 一.基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些 ...

  5. C#中类的继承 override virtual new的作用以及代码分析

    继承中override virtual new的作用 virtual 父类中需要注明允许重写的方法: override 子类中必须显示声明该方法是重写的父类中的方法: new 子类中忽略父类的已存在的 ...

  6. 2017.4.18 静态代码分析工具sonarqube+sonar-runner的安装配置及使用

    配置成功后的代码分析页面: 可以看到对复杂度.语法使用.重复度等等都做了分析,具体到了每一个方法和每一句代码. 四种使用方式: sonarqube + sonar-runner sonarqube + ...

  7. lighttpd1.4.18代码分析

    lighttpd1.4.18代码分析(八)--状态机(2)CON_STATE_READ状态 posted @ 2008-09-24 10:50 那谁 阅读(2225) | 评论 (1)  编辑 lig ...

  8. Device Tree(三):代码分析

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 Device Tree总共有三篇,分别是: 1.为何要引入Device Tree,这个机制是用来解决什么问题的?(请 ...

  9. 使用Hadoop和ELK进行业务代码分析!分分钟捉到Bug!

    大数据是计算领域的新高地,它有望提供一种方法来应对二十一世纪不断增长的数据生成.越来越多的大数据爱好者正在涌现,越来越多的公司正在采用各种大数据平台,并希望提出以客户为中心的解决方案,帮助他们在竞争激 ...

  10. 20145328 《网络对抗技术》恶意代码分析

    20145328 <网络对抗技术>恶意代码分析 ------看到这句话说明还没写完-------- 实践内容: 使用schtasks指令监控系统运行 使用sysmon工具监控系统运行 使用 ...

最新文章

  1. 使用花生壳自己架设网站:路由器后
  2. mysql怎么把字符变成数字_mysql将字符转换成数字
  3. [Computation]集合、关系、语言
  4. 栈(Stack),轻松解决数制转换和括号匹配问题!
  5. java string rt_如何使jvm加载我的java.lang.String而不是rt.jar中的那个
  6. 基于消息队列的日志组件
  7. linux标准I/O——标准I/O介绍
  8. idea cloud bootstrap是啥_application.yml与bootstrap.yml的区别
  9. c++11特性move和forward区别
  10. 【其他】编程技巧之常用缩写
  11. Web 开发与设计师速查手册大全
  12. js给列表设置统一的高度
  13. 斐波那契数列的Python简单实现
  14. 计算机大赛鼓励语录,比赛鼓励的话
  15. [IT学习]阿铭Linux 微信公众号 每日一题 解析
  16. 基于macos M1 python3.8的tensorflow安装(简单方便几步完成)
  17. 在Ubuntu PHP中基于wxsqlite3扩展使用加密的Sqlite数据库
  18. ssm基于微信小程序的电影影评交流平台系统 uni-app
  19. 简述C语言中32个关键字
  20. 配置完hadoop后调用HDFS的API进行统计英语单词数量

热门文章

  1. ZZULIOJ 1168
  2. 网易云音乐java_网易云音乐被下架?掌握这几步,你也能做出网易云!
  3. 人体姿态识别-左肩和左肘的定位识别
  4. PS 批量导入图片制作 gif
  5. ActiveMQ 下载、安装
  6. 基于Python构建土地利用转移矩阵及完成Markov预测
  7. numpy中dot, multiply, *区别
  8. CCS软件的C语言取模注意点
  9. 屏幕取色器,windows
  10. 以4%参数量比肩GPT-3!Deepmind 发布检索型 LM,或将成为 LM 发展新趋势!?