用户登录之cookie信息安全一二事,cookie信息安全_PHP教程
用户登录之cookie信息安全一二事,cookie信息安全
大家都知道用户登陆后,用户信息一般会选择保存在cookie里面,因为cookie是保存客户端,
并且cookie可以在客户端用浏览器自由更改,这样将会造成用户cookie存在伪造的危险,从而可能使伪造cookie者登录任意用户的账户。
下面就说说平常一些防止用户登录cookie信息安全的方法:
一、cookie信息加密法
cookie信息加密法即用一种加密方法,加密用户信息,然后在存入cookie,这样伪造者即使得到cookie也只能在cookie有效期内对这个cookie利用,无法另外伪造cookie信息。
这里附上一个加密函数:
<!--?<span>php </span><span>function</span> authcode(<span>$string</span>, <span>$operation</span> = 'DECODE', <span>$key</span> = '', <span>$expiry</span> = 0<span>) { </span><span>//</span><span> 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 </span> <span>$ckey_length</span> = 4<span>; </span><span>//</span><span> 密匙 </span> <span>$key</span> = <span>md5</span>(<span>$key</span> ? <span>$key</span> : <span>$GLOBALS</span>['discuz_auth_key'<span>]); </span><span>//</span><span> 密匙a会参与加解密 </span> <span>$keya</span> = <span>md5</span>(<span>substr</span>(<span>$key</span>, 0, 16<span>)); </span><span>//</span><span> 密匙b会用来做数据完整性验证 </span> <span>$keyb</span> = <span>md5</span>(<span>substr</span>(<span>$key</span>, 16, 16<span>)); </span><span>//</span><span> 密匙c用于变化生成的密文 </span> <span>$keyc</span> = <span>$ckey_length</span> ? (<span>$operation</span> == 'DECODE' ? <span>substr</span>(<span>$string</span>, 0, <span>$ckey_length</span>): <span>substr</span>(<span>md5</span>(<span>microtime</span>()), -<span>$ckey_length</span>)) : ''<span>; </span><span>//</span><span> 参与运算的密匙 </span> <span>$cryptkey</span> = <span>$keya</span>.<span>md5</span>(<span>$keya</span>.<span>$keyc</span><span>); </span><span>$key_length</span> = <span>strlen</span>(<span>$cryptkey</span><span>); </span><span>//</span><span> 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b), //解密时会通过这个密匙验证数据完整性 // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 </span> <span>$string</span> = <span>$operation</span> == 'DECODE' ? <span>base64_decode</span>(<span>substr</span>(<span>$string</span>, <span>$ckey_length</span>)) : <span>sprintf</span>('%010d', <span>$expiry</span> ? <span>$expiry</span> + <span>time</span>() : 0).<span>substr</span>(<span>md5</span>(<span>$string</span>.<span>$keyb</span>), 0, 16).<span>$string</span><span>; </span><span>$string_length</span> = <span>strlen</span>(<span>$string</span><span>); </span><span>$result</span> = ''<span>; </span><span>$box</span> = <span>range</span>(0, 255<span>); </span><span>$rndkey</span> = <span>array</span><span>(); </span><span>//</span><span> 产生密匙簿 </span> <span>for</span>(<span>$i</span> = 0; <span>$i</span> <= 255; <span>$i</span>++<span>) { </span><span>$rndkey</span>[<span>$i</span>] = <span>ord</span>(<span>$cryptkey</span>[<span>$i</span> % <span>$key_length</span><span>]); } </span><span>//</span><span> 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度 </span> <span>for</span>(<span>$j</span> = <span>$i</span> = 0; <span>$i</span> < 256; <span>$i</span>++<span>) { </span><span>$j</span> = (<span>$j</span> + <span>$box</span>[<span>$i</span>] + <span>$rndkey</span>[<span>$i</span>]) % 256<span>; </span><span>$tmp</span> = <span>$box</span>[<span>$i</span><span>]; </span><span>$box</span>[<span>$i</span>] = <span>$box</span>[<span>$j</span><span>]; </span><span>$box</span>[<span>$j</span>] = <span>$tmp</span><span>; } </span><span>//</span><span> 核心加解密部分 </span> <span>for</span>(<span>$a</span> = <span>$j</span> = <span>$i</span> = 0; <span>$i</span> < <span>$string_length</span>; <span>$i</span>++<span>) { </span><span>$a</span> = (<span>$a</span> + 1) % 256<span>; </span><span>$j</span> = (<span>$j</span> + <span>$box</span>[<span>$a</span>]) % 256<span>; </span><span>$tmp</span> = <span>$box</span>[<span>$a</span><span>]; </span><span>$box</span>[<span>$a</span>] = <span>$box</span>[<span>$j</span><span>]; </span><span>$box</span>[<span>$j</span>] = <span>$tmp</span><span>; </span><span>//</span><span> 从密匙簿得出密匙进行异或,再转成字符 </span> <span>$result</span> .= <span>chr</span>(<span>ord</span>(<span>$string</span>[<span>$i</span>]) ^ (<span>$box</span>[(<span>$box</span>[<span>$a</span>] + <span>$box</span>[<span>$j</span>]) % 256<span>])); } </span><span>if</span>(<span>$operation</span> == 'DECODE'<span>) { </span><span>//</span><span> 验证数据有效性,请看未加密明文的格式 </span> <span>if</span>((<span>substr</span>(<span>$result</span>, 0, 10) == 0 || <span>substr</span>(<span>$result</span>, 0, 10) - <span>time</span>() --> 0) && <span>substr</span>(<span>$result</span>, 10, 16) == <span>substr</span>(<span>md5</span>(<span>substr</span>(<span>$result</span>, 26).<span>$keyb</span>), 0, 16<span>)) { </span><span>return</span> <span>substr</span>(<span>$result</span>, 26<span>); } </span><span>else</span><span> { </span><span>return</span> ''<span>; } } </span><span>else</span><span> { </span><span>//</span><span> 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因 // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码 </span> <span>return</span> <span>$keyc</span>.<span>str_replace</span>('=', '', <span>base64_encode</span>(<span>$result</span><span>)); } } </span><span>$str</span> = 'abcdef'<span>; </span><span>$key</span> = 'www.phpskill.com'<span>; </span><span>echo</span> <span>$jm</span> = authcode(<span>$str</span>,'ENCODE',<span>$key</span>,0); <span>//</span><span>加密 </span> <span>echo</span> " "<span>; </span><span>echo</span> authcode(<span>$jm</span> ,'DECODE',<span>$key</span>,0); <span>//</span><span>解密</span> ?>
这样当设置用户信息的cookie时,就无法对其进行伪造:
<!--?<span>php </span><span>$user</span> = <span>array</span>("uid"=--><span>$uid</span>,"username"=><span>$username</span><span>); </span><span>$user</span> = <span>base64_encode</span>(<span>serialize</span>(<span>$user</span><span>)); </span><span>$user</span> = authcode(<span>$user</span>,'ENCODE','www.phpskill.com',0); <span>//</span><span>加密 </span> <span>setcookie</span>("user",<span>$user</span>,<span>time</span>()+3600*24<span>); </span>?>
二、用加密令牌对cookie进行保护
<span>$hash</span> = <span>md5</span>(<span>$uid</span>.<span>time</span>());<span>//</span><span>加密令牌值</span> <span>$hash_expire</span> =<span>time</span>()+3600*24;<span>//</span><span>加密令牌值为一天有效期</span> <span>$user</span> = <span>array</span>("uid"=><span>$uid</span>,"username"=><span>$username</span>,"hash"=><span>$hash</span><span>); </span><span>$user</span> = <span>base64_encode</span>(<span>serialize</span>(<span>$user</span><span>)); </span><span>setcookie</span>("user",<span>$user</span>,<span>$hash_expr</span><span>); 然后把</span><span>$hash和$hash_expire</span> 存入member表中hash和hash_expire对应字段中,<span>也可以存入nosql,session 用户伪造cookie时,hash无法伪造</span>,<span>伪造的hash和数据库中的不一致 用户每次登陆,这个hash_expire有效期内不更新hash值,过期则更新</span>
php纯技术交流群: 323899029
原文转载于:http://www.phpskill.com/html/show-1-4424-1.html

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

许多Windows用户最近在尝试访问GoogleChrome浏览器中的网站URL时遇到了一个不寻常的错误,称为Roblox403禁止错误。即使在多次重新启动Chrome应用程序后,他们也无能为力。此错误可能有几个潜在原因,我们在下面概述并列出了其中一些。Chrome的浏览历史和其他缓存以及损坏的数据不稳定的互联网连接网站网址不正确从第三方来源安装的扩展在考虑了上述所有方面之后,我们提出了一些修复程序,可以帮助用户解决此问题。如果您遇到同样的问题,请查看本文中的解决方案。修复1

Cookie通常存储在浏览器的Cookie文件夹中的,浏览器中的Cookie文件通常以二进制或SQLite格式存储,如果直接打开Cookie文件,可能会看到一些乱码或无法读取的内容,因此最好使用浏览器提供的Cookie管理界面来查看和管理Cookie。

电脑上的Cookie存储在浏览器的特定位置,具体位置取决于使用的浏览器和操作系统:1、Google Chrome, 存储在C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data\Default\Cookies中等等。

手机上的Cookie存储在移动设备的浏览器应用程序中:1、在iOS设备上,Cookie存储在Safari浏览器的Settings -> Safari -> Advanced -> Website Data中;2、在Android设备上,Cookie 存储在Chrome浏览器的Settings -> Site settings -> Cookies中等等。

cookie工作原理涉及到服务器发送Cookie、浏览器存储Cookie以及浏览器对Cookie的处理和存储。详细介绍:1、服务器发送Cookie,服务器会向浏览器发送一个包含Cookie的HTTP响应头。这个Cookie包含了一些信息,如用户的身份认证、偏好设置或购物车内容等,浏览器接收到这个Cookie后,会将它存储在用户的计算机上;2、浏览器存储Cookie等等。

cookie泄漏的危害有导致个人身份信息被盗窃、个人在线行为被追踪、账户被盗等。详细介绍:1、个人身份信息被盗窃,例如姓名、电子邮件地址、电话号码等,这些信息可能被不法分子用于进行身份盗窃、欺诈等违法活动;2、个人在线行为被追踪,通过分析cookie中的数据,不法分子可以了解用户的浏览历史、购物偏好、兴趣爱好等;3、账户被盗,绕过登录验证,直接访问用户的账号等等。

清除cookie产生的影响有重置个性化设置和偏好、影响广告体验、破坏登录状态和记住密码功能。详细介绍:1、重置个性化设置和偏好,如果清除了cookie,购物车将被重置为空,需要重新添加商品,同样清除cookie还会导致在社交媒体平台上的登录状态丢失,需要重新输入用户名和密码;2、影响广告体验,如果清除了cookie,网站将无法了解我们的兴趣和偏好,会展示无关的广告等等。

随着互联网的普及,我们使用浏览器进行上网已经成为一种生活方式。在日常使用浏览器过程中,我们经常会遇到需要输入账号密码的情况,如网购、社交、邮件等。这些信息需要浏览器记录下来,以便于下次访问时不需要再次输入,这时候Cookie就派上了用场。什么是Cookie?Cookie是指由服务器端发送到用户浏览器上并存储在本地的一种小型数据文件,它包含了一些网站的用户行为
