PHP下如何对cookie进行加密和解密实现自动安全登录功能
Cookie的目的是为用户带来方便,为网站带来增值,一般情况下不会造成严重的安全威胁。Cookie文件不能作为代码执行,也不会传送病毒,它为用户所专有并只能由创建它的服务器来读取。另外,浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB,因此,Cookie不会塞满硬盘,更不会被用作”拒绝服务”攻击手段。
(1)Cookie欺骗
Cookie记录了用户的帐户ID、密码之类的信息,通常使用MD5方法加密后在网上传递。经过加密处理后的信息即使被网络上一些别有用心的人截获也看不懂。然而,现在存在的问题是,截获Cookie的人不需要知道这些字符串的含义,只要把别人的Cookie向服务器提交,并且能够通过验证,就可以冒充受害人的身份登陆网站,这种行为叫做Cookie欺骗。
(2)Cookie截获
Cookie以纯文本的形式在浏览器和服务器之间传送,很容易被他人非法截获和利用。任何可以截获Web通信的人都可以读取Cookie。
Cookie被非法用户截获后,然后在其有效期内重放,则此非法用户将享有合法用户的权益。
Cookie作为用户身份的替代,其安全性有时决定了整个系统的安全性,Cookie的安全性问题不容忽视。所以我们需要对cookie进行加密存储,使用的时候再进行逆向解密操作,比如网站自动登录功能的实现,就需要我们对网站cookie进行加密操作
cookie加密解密函数如下:
- /**
- * cookie加密、解密函数
- * @param string $txt 字符串
- * @param string $operation ENCODE为加密,DECODE为解密,可选参数
- * @param string $key 密钥:数字、字母、下划线
- * @param string $expiry 过期时间
- * @return string
- */
- function str_auth($string, $operation = ‘ENCODE’, $key = ”, $expiry = 0) {
- $ckey_length = 4;
- $key = md5($key!=”?$key:’www_uxuew_cn’); //加密秘钥
- $keya = md5(substr($key, 0, 16));
- $keyb = md5(substr($key, 16, 16));
- $keyc = $ckey_length ? ($operation == ‘DECODE’ ? substr($string, 0, $ckey_length): substr(md5(microtime()), –$ckey_length)) : ”;
- $cryptkey = $keya.md5($keya.$keyc);
- $key_length = strlen($cryptkey);
- $string = $operation == ‘DECODE’ ? base64_decode(strtr(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 {
- return $keyc.rtrim(strtr(base64_encode($result), ‘+/’, ‘-_’), ‘=’);
- }
- }
cookie加密存储:
$c=str_auth(‘123456@192.168.1.1@fsf5852‘);
setcookie(‘user‘,$c);
cookie解密:
$token=str_auth($_COOKIE[‘user‘],’DECODE‘);
explode(‘@‘,$token);
var_dump($token);
注:这个函数和md5不同的是:
1、可以实现加密和逆向解密功能;
2、相同的字符串,每次加密会产生不同的结果,提高安全性
转载请注明:代码学堂>编程开发 > php教程 > PHP下如何对cookie进行加密和解密实现自动安全登录功能
2. 本站不保证所提供所有下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有RB奖励和额外RMB收入!
磊宇堂正在使用的服务器 维护管理由磊宇云服务器提供支持
磊宇堂 » PHP下如何对cookie进行加密和解密实现自动安全登录功能