[Discuz]傳入 UID 及 md5 password 判斷是否正常登入

之前有個構想是利用 Discuz 來登入某 FileZilla FTP
選用 FileZilla FTP 的原因是因為他有開放原始碼,所以比較容易更改,但是我畢竟對 C++ 並不是那麼的熟悉,所以就先在 Discuz 這邊作個判斷網頁,判斷是否正確登入
那目前這作品因為沒有任何防 try 密碼的防護,所以不建議檔名取得大家都知道...
最好就 FTP Server 及 Discuz 端兩邊知道就行
<?php
/* Design by 小期 */
define('NOROBOT', TRUE);
define('CURSCRIPT', 'FTPCheckLogin');

require_once './include/common.inc.php';
require_once DISCUZ_ROOT.'./include/misc.func.php';

if(!preg_match("/^LOGIN_(?P<uid>\d+)$/i", $account, $matches))
 exit("no");

$uid = $matches['uid'];
 
$member = $db->fetch_first("SELECT m.uid AS discuz_uid, m.password AS discuz_pw, m.adminid, m.groupid, m.salt
   FROM {$tablepre}members m LEFT JOIN {$tablepre}usergroups u USING (groupid)
   WHERE m.uid='$uid'");

if($member['discuz_uid'] && checkmd5($md5_password, $member['discuz_pw'], $member['salt']))
{
 if(in_array($member['adminid'], array(1, 2, 3)) || in_array($member['groupid'], array(20)))
  exit('ok');
 else
  exit('no');
}
else
 exit('no');
?>
那目前這版本限制的是使用 LOGIN_ 前綴加上你在該論壇的 uid ,然後只要你是管理階層(管理員、超版或版主)或者是特定群組(以此原始碼的例子為群組編號為 20) 即會丟出 ok 兩字,只要條件不符合則會丟出 no
而適用的版本為 Discuz 6.1F ,其他版本我並不確定是否需更改程式碼(如需的話大概會是在 checkmd5 那邊需作更改而已!)

留言

這個網誌中的熱門文章

DB 資料庫呈現復原中

Outlook 刪除大量重覆信件

[VB.Net] If vs IIf ,兩者的差異