php用户登录之cookie信息平安分析_.docx

上传人:PIYPING 文档编号:11660466 上传时间:2021-08-28 格式:DOCX 页数:6 大小:13.58KB
返回 下载 相关 举报
php用户登录之cookie信息平安分析_.docx_第1页
第1页 / 共6页
php用户登录之cookie信息平安分析_.docx_第2页
第2页 / 共6页
php用户登录之cookie信息平安分析_.docx_第3页
第3页 / 共6页
php用户登录之cookie信息平安分析_.docx_第4页
第4页 / 共6页
php用户登录之cookie信息平安分析_.docx_第5页
第5页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《php用户登录之cookie信息平安分析_.docx》由会员分享,可在线阅读,更多相关《php用户登录之cookie信息平安分析_.docx(6页珍藏版)》请在三一文库上搜索。

1、php用户登录之cookie信息平安分析_ 本文实例讲解并描述了php用户登录之cookie信息平安。分享给大家供大家参考,具体如下: 大家都知道用户登陆后,用户信息一般会选择保存在cookie里面,由于cookie是保存客户端,并且cookie可以在客户端用扫瞄器自由更改,这样将会造成用户cookie存在伪造的_,从而可能使伪造cookie者登录任意用户的账户。 下面就说说平常一些防止用户登录cookie信息平安的方法: 一、cookie信息加密法 cookie信息加密法即用一种加密方法,加密用户信息,然后在存入cookie,这样伪造者即使得到cookie也只能在cookie有效期内对这个c

2、ookie利用,无法另外伪造cookie信息。 这里附上一个加密函数: ?php function authcode($string, $operation = DECODE, $key = , $expiry = 0) / 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; / 密匙 $key = md5($key ? $key : $GLOBALSdiscuz_auth_key); / 密匙a会参加加解密 $keya = md5(substr($key, 0, 16); / 密匙b会用来做数据完整性验证 $keyb = md5(substr($key

3、, 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), /解密时会通过这个密匙验证数据完整性 / 假

4、如是解码的话,会从第$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); $rnd

5、key = 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

6、; $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) sub

7、str($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 = ; echo $jm = authcode($str

8、,ENCODE,$key,0); /加密 echo ; echo authcode($jm ,DECODE,$key,0); /解密 ? 这样当设置用户信息的cookie时,就无法对其进行伪造: ?php $user = array(uid=-$uid,username=$username); $user = base64_encode(serialize($user); $user = authcode($user,ENCODE,,0); /加密 setcookie(user,$user,time()+3600*24); ? 二、用加密令牌对cookie进行爱护 $hash = md5($u

9、id.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程序设计有所关心。 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1