上帝问:phpwind是怎么登陆?

OpenTest, Solution Add comments |

人类的一个小分子回答说:

首先:点击登陆-》这时页面到达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.


Powered byWordPress 2.6.2 | Theme by N.Design Studio | Processed in 0.79 秒 苏ICP备07500719号

Entries RSS Comments RSS 登录
Links to Page