사용자 로그인의 쿠키 정보 보안
14347 단어 cookie
여기에는 다음과 같은 암호화 함수가 첨부되어 있습니다.
<!--?php
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
// ,
$ckey_length = 4;
//
$key = md5($key ? $key : $GLOBALS['discuz_auth_key']);
// a
$keya = md5(substr($key, 0, 16));
// b
$keyb = md5(substr($key, 16, 16));
// c
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length):
substr(md5(microtime()), -$ckey_length)) : '';
//
$cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey);
// , 10 , ,10 26 $keyb( b),
//
// , $ckey_length , $ckey_length ,
$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) :
sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = array();
//
for($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
// , , , ,
for($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
//
for($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
// ,
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if($operation == 'DECODE') {
// ,
if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() --> 0) &&
substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
return substr($result, 26);
} else {
return '';
}
} else {
// , ,
// , , base64
return $keyc.str_replace('=', '', base64_encode($result));
}
}
$str = 'abcdef';
$key = 'www.phpskill.com';
echo $jm = authcode($str,'ENCODE',$key,0); //
echo "
";
echo authcode($jm ,'DECODE',$key,0); //
?>
이렇게 하면 사용자 정보의 쿠키를 설정할 때 이를 위조할 수 없습니다.
<!--?php
$user = array("uid"=-->$uid,"username"=>$username);
$user = base64_encode(serialize($user));
$user = authcode($user,'ENCODE','www.phpskill.com',0); //
setcookie("user",$user,time()+3600*24);
?>
2. 암호화 토큰으로 쿠키 보호
$hash = md5($uid.time());//
$hash_expire =time()+3600*24;//
$user = array("uid"=>$uid,"username"=>$username,"hash"=>$hash);
$user = base64_encode(serialize($user));
setcookie("user",$user,$hash_expr);
$hash $hash_expire member hash hash_expire , nosql,session
cookie ,hash , hash
, hash_expire hash ,
php 순수 기술 교류군:323899029
텍스트 전재:http://www.phpskill.com/html/show-1-4424-1.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
서버에서 쿠키 만료 값 가져오기브라우저는 쿠키 만료를 처리하므로 쿠키의 만료 값을 서버에 전달하지 않습니다. 서버에서 쿠키의 만료 값을 얻으려면 일부 조정을 해야 합니다. 두 가지 방법이 있습니다. JSON 값으로 쿠키를 생성할 수 있습니다 다른...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.