1. 程式人生 > >Discuz!開發之附件動態連結生成與解析

Discuz!開發之附件動態連結生成與解析

熟悉discuz!的朋友應該知道,discuz!的附件在前臺顯示的都是動態的下載連結,例如:

http://localhost/forum.php?mod=attachment&aid=MTc2NTF8OTVkOTMyODB8MTQ5MTk4MDg1MHwxfDMyMQ%3D%3D

從上面我們看到,引數aid並不是附件表中的aid,難道此次有加密?

我們來研究一下這個aid引數的生成方法:

\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、論壇安全碼、時間、我的ID號、主題ID等資訊字串拼接之後使用了base64加密而來,因此我們的就很容易解析這個aid引數,可參考:

\source\module\forum\forum_attachment.php

@list($_GET['aid'], $_GET['k'], $_GET['t'], $_GET['uid'], $_GET['tableid']) = daddslashes(explode('|', base64_decode($_GET['aid'])));