易游网-易游模拟器

 找回密码
 立即注册
查看: 1753|回复: 0

[php] Discuz登陆原理解析

[复制链接]

1406

主题

1663

帖子

1万

积分

管理员

夏墨独周

Rank: 9Rank: 9Rank: 9

积分
10094

论坛元老技术达人

QQ
发表于 2020-12-3 09:11:19 | 显示全部楼层 |阅读模式
DiscuzX 登录原理
DiscuzX 中记录登录信息的两个关键 cookie 是 saltkey 和 auth,只要这两个值不被改变,那么这个会话就被视为已登录,具体请参考 upload/source/function/function_core.php:153 中 authcode 函数的加解密算法,upload/source/function/function_member.php:81 和 upload/source/class/discuz/discuz_application.php:454 处的调用。

解码的大致流程:由全局的 authkey 和 saltkey 生成一个会话的 authkey。使用这个 authkey 解码 auth 得到 password 和 uid,判断 uid 的密码是否等于 password。

由此可见只要这两个 cookie 相同,那么就会被视为已登录。可以尝试点击退出登录,然后在把 cookie 复原,这个授权是永久的,除非改变全局 authkey。

每次登录的随机产生的 saltkey 不同,所以 auth 是不一样的,如果同一个用户对应了两个 auth,那么很明显,他重复登录了。

如果首次打开网站,cookie 中还没有 saltkey 那么会随机生成一个与 microtime() 有关的 8 字节的字符串,作为 saltkey。

由于这种“永久性登录授权”,导致我们没法彻底登出,防君子不防小人,具体我们就不再讨论。

注意:这里所说的 password 是 pre_common_member 表中的 password 字段,它与用户的密码毫无关联,只是一个 token 一样的东西,通过 md5(random(10)) 生成(具体参考 upload/source/class/class_member.php:728),真正的密码储存在 pre_ucenter_members 中,这个 password 会在用户重置密码时重新生成,所以如果重新这个字段可以达到取消“永久性登录授权”的目的。

来源:易游模拟器(QQ:207621422),转载请注明出处!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易游网-易游模拟器 Copyright @2015-2021 ( 浙ICP备15028007号-1 )

GMT+8, 2024-5-18 11:33 , Processed in 0.025391 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表