cookie存的数据:
prefix_uid=1
prefix_auth=b86cda8a830394a8f7bf061277958cd9e6b06e52ef6754e97568100b263cbf67ebd41b76ccbc6ed49cefc6fe22e1a64e1938cdc354a903ac5ac5d1f621121dc0
uid存放的是当前登陆用户的id,auth是由 浏览器标头+当前用户id+当前用户在数据库中存储的32位的MD5哈希散列密码字符 组成的字符串,例如:
然后由HMAC算法加上系统自己设定的密钥为HMAC的key,最终生成auth:
当页面每次刷新时,检测prefix_uid是否以正整数形式与prefix_auth同时存在,如果是,则根据prefix_uid从数据库中获取用户的id和加密后的密码按照上述方法获取auth后与cookie中的auth相比对,如果一致则表示用户当前为登陆状态,否则为游客状态。如果存在uid和auth但是并不能正确匹配,那就是有人在尝试用cookie攻击。
prefix_uid=1
prefix_auth=b86cda8a830394a8f7bf061277958cd9e6b06e52ef6754e97568100b263cbf67ebd41b76ccbc6ed49cefc6fe22e1a64e1938cdc354a903ac5ac5d1f621121dc0
uid存放的是当前登陆用户的id,auth是由 浏览器标头+当前用户id+当前用户在数据库中存储的32位的MD5哈希散列密码字符 组成的字符串,例如:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; QQDownload 675; Maxthon 2.0)14eabcab430f6b3b074f6522f1c854808
然后由HMAC算法加上系统自己设定的密钥为HMAC的key,最终生成auth:
fcce9bf3046d4b509a6c58a87127f1c7948bc670ada3d05e07dcb3442ce97f8a85fac53ee6e752dce58f4bbd259449fa201693db74e0988905cc0f0b1daefa46
当页面每次刷新时,检测prefix_uid是否以正整数形式与prefix_auth同时存在,如果是,则根据prefix_uid从数据库中获取用户的id和加密后的密码按照上述方法获取auth后与cookie中的auth相比对,如果一致则表示用户当前为登陆状态,否则为游客状态。如果存在uid和auth但是并不能正确匹配,那就是有人在尝试用cookie攻击。
- $key = 'adfasdfasdfasfasafasdfasdfad';
- $str = "{$_SERVER['REMOTE_ADDR']}{$_SERVER['HTTP_USER_AGENT']}1".md5('dfasdfadf34515145145');
- echo hash_hmac('sha512',$str,$key);