收起左侧

解密Discuz的头像 附件图片真实地址存储规则

[复制链接]
KelKexy发表于 2020-1-31 16:34:14
头像存储规则,用户uid为:80629

对应头像地址:http://域名/uc_server/data/avatar/000/08/06/29_avatar_middle.jpg (中等尺寸)
然后再说附件图片:

如果显示真实附件地址的,如下:
  1. https://www.aoebbs.net/data/attachment/forum/201904/20/160627gepjoc7f1jxcfioc.jpg.thumb.jpg
复制代码


但是很多都是加密过的,如下:
  1. https://www.aoebbs.net/forum.php?mod=attachment&aid=MjE1MjR8YjNkMTdkNzJ8MTU2NzM4Nzg0NnwxfDI3Mjk=&noupdate=yes
复制代码


取aid后面加密部分 (我这个是假的字串,要测试你找你个真的加密字串)
MjE1MjR8YjNkMTdkNzJ8MTY2NzM4Nzg0NnwyfDI3Mjk

BASE64解密得到
21524|b3d17d72|1667387846|2|2729
注意:1667387846是Unix时间戳
注意:21524 真正的aid, b3d17d72 这个 key? 2 是用户UID 2729 是 thread ID =tid

可以理解为\source\function\function_core.php
function aidencode($aid, $type = 0, $tid = 0) {
global $_G;
$s = !$type ? $aid.'|'.substr(md5($aid.md5($_G['config']['security']['authkey']).TIMESTAMP.$_G['uid']), 0, 8).'|'.TIMESTAMP.'|'.$_G['uid'].'|'.$tid : $aid.'|'.md5($aid.md5($_G['config']['security']['authkey']).TIMESTAMP).'|'.TIMESTAMP;
return rawurlencode(base64_encode($s));

}
复制代码


aid参数就是把该附件的aid、安全码、时间、UID、主题ID等信息字符串拼接之后使用了base64加密而来,可参考:
\source\module\forum\forum_attachment.php
@list($_GET['aid'], $_GET['k'], $_GET['t'], $_GET['uid'], $_GET['tableid']) = daddslashes(explode('|', base64_decode($_GET['aid'])));


就是 aid key? time uid tableid
有了真实的 aid 搜索 pre_forum_attachment (0-9) 9张表里面。 找到 aid=21524 这条数据 ,就有真实的附件存储地址:
202004/20/110953dwxxyigaigs5dxwn.jpg

那齐全的地址就是
  1. https://www.aoebbs.net/data/attachment/forum/201104/20/110953dwxxyigaigs5dxwn.jpg
复制代码


好了。到此。

附件 按上传时间存储在不同目录,规则如下
DISCUZ_ROOT.'data/attachment/forum/'.date('Ym',$dateline).'/'.date('d',$dateline).'/'.date('His',$dateline).strtolower(random(16)).'.拓展名';
跳转到