人类的一个小分子回答说:
首先:点击登陆-》这时页面到达login.php。系统写入cookies一些值(一看就猜到的意思,偶就不多说了。)
$_COOKIE
b9bfa_lastfid 0
b9bfa_lastvisit 16 1193647486 /ot/bbs/login.php?
b9bfa_ol_offset 97
login.php /line22: !$action && $action=”login”;// 判断action是否负值,默认login
login.php /line34: if(!$_POST['step']){//显示登陆表单
login.php /line39: } elseif($_POST['step']==2){//登陆开始
经过一些基本安检工作后;开始正式验证。
//安全问题答案加密
$safecv=$db_ifsafecv ? questcode($question,$customquest,$answer) : ”;
//密码验证 && 安全问题密文对比检测
list($winduid,$groupid,$pwpwd)=checkpass($pwuser,$md5_pwpwd,$safecv);
将用户名密码以及安全问题答案提交给checkpass函数;
获取data/groupdb/group_$groupid.php中常数 (用于常用参数如hide比对)
核心验证 通过了,开始写入cookies
Cookie(”winduser”,StrCode($winduid.”\t”.$windpwd.”\t”.$safecv),$cktime);
Cookie(’lastvisit’,”,0);//将$lastvist清空以将刚注册的会员加入今日到访会员中
简单示例下Cookie:
function Cookie($ck_Var,$ck_Value,$ck_Time = ‘F’,$p=1){
global $db_ckpath,$db_ckdomain,$timestamp;
$ck_Time = $ck_Time === ‘F’ ? $timestamp + 31536000 : ($ck_Value == ” && $ck_Time == 0 ? $timestamp - 31536000 : $ck_Time);
$S = $_SERVER['SERVER_PORT'] == ‘443′ ? 1:0;
!$db_ckpath && $db_ckpath = ‘/’;
$p && $ck_Var=CookiePre().’_’.$ck_Var;
setCookie($ck_Var,$ck_Value,$ck_Time,$db_ckpath,$db_ckdomain,$S);
}
这里面需要注意StrCode .是pw做得有些变X的特色。也让我的大统一工作多了不少麻烦。直接看代码吧。不是很复杂的代码。顺便提到的是$_SERVER["HTTP_USER_AGENT"]在IE和FF下有不一致的结果。这个想必很多人已经知道了。我不知道而已。^_^
function StrCode($string,$action=’ENCODE’){
$key = substr(md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS['db_hash']),8,18);
$string = $action == ‘ENCODE’ ? $string : base64_decode($string);
//echo $string;
$len = strlen($key);
$code = ”;
for($i=0; $i<strlen($string); $i++){
$k = $i % $len;
$code .= $string[$i] ^ $key[$k];
}
$code = $action == ‘DECODE’ ? $code : base64_encode($code);
//exit($code);
return $code;
}
至于接下来的一些pw做的passport工作。我估计我不想用。^_^
Leave a Reply
You must be logged in to post a comment.

Recent Comments