二、後臺登陸login.php【dedecms後臺源碼分析】

 

  1. <?php 
  2. /** 
  3.  * 後臺登陸 
  4.  * 
  5.  * @version        $Id: login.php 1 8:48 2010年7月13日Z tianya $ 
  6.  * @package        DedeCMS.Administrator 
  7.  * @copyright      Copyright (c) 2007 - 2010, DesDev, Inc. 
  8.  * @license        http://help.dedecms.com/usersguide/license.html 
  9.  * @link           http://www.dedecms.com 
  10.  */ 
  11. //引入公共的顯示文件   目錄路徑   域名/include/common.inc.php 
  12. require_once(dirname(__FILE__).'/../include/common.inc.php'); 
  13. //引入管理員登陸類       目錄路徑   域名/include/userlogin.class.php 
  14. require_once(DEDEINC.'/userlogin.class.php'); 
  15. //判斷$dopost是否爲空   $dopost是點擊提交的發送變量 
  16. if(emptyempty($dopost)) $dopost = ''
  17.  
  18. //檢測安裝目錄安全性 
  19. //判斷是否安裝dedecms 
  20. //判斷安裝目錄是否存在 
  21. ifis_dir(dirname(__FILE__).'/../install') ) 
  22. {    
  23.     //如果安裝之後的install_lock.txt文件不存在 
  24.     if(!file_exists(dirname(__FILE__).'/../install/install_lock.txt') ) 
  25.     { 
  26.       //以寫的方式打開install_lock.txt 
  27.       //如果無法寫入則執行後面那一句 
  28.       $fp = fopen(dirname(__FILE__).'/../install/install_lock.txt''w'or die('安裝目錄無寫入權限,無法進行寫入鎖定文件,請安裝完畢刪除安裝目錄!'); 
  29.       //寫入ok 
  30.       fwrite($fp,'ok'); 
  31.       //關閉文件 
  32.       fclose($fp); 
  33.     } 
  34.     //爲了防止未知安全性問題,強制禁用安裝程序的文件 
  35.     //判斷安裝的index.php存在        目錄路徑   域名/install/index.php 
  36.     iffile_exists("../install/index.php") ) { 
  37.         //rename() 函數重命名文件或目錄。 
  38.         /** 
  39.          * 若成功,則該函數返回 true。若失敗,則返回 false。 
  40.          * 語法 
  41.          * rename(oldname,newname,context) 
  42.          * 參數   描述 
  43.          * oldname  必需。規定要重命名的文件或目錄。 
  44.          * newname  必需。規定文件或目錄的新名稱。 
  45.          * context  可選。規定文件句柄的環境。context 是可修改流的行爲的一套選項。 
  46.          */ 
  47.         //重命名   目錄路徑   域名/install/index.php    備份文件      域名/install/index.php.bak 
  48.         @rename("../install/index.php""../install/index.php.bak"); 
  49.     } 
  50.     //判斷安裝的module-install.php存在        目錄路徑   域名/install/index.php 
  51.     iffile_exists("../install/module-install.php") ) { 
  52.         //重命名   目錄路徑   域名/install/module-install.php    備份文件      域名/install/module-install.php.ba 
  53.         @rename("../install/module-install.php""../install/module-install.php.bak"); 
  54.     } 
  55.     //定義文件路徑         目錄路徑   域名/install/index.html 
  56.     $fileindex = "../install/index.html"
  57.     //判斷  文件路徑文件是否存在 
  58.     if( !file_exists($fileindex) ) { 
  59.         //用可寫的方式打開文件 
  60.         $fp = @fopen($fileindex,'w'); 
  61.         //寫入dir 
  62.         fwrite($fp,'dir'); 
  63.         //關閉 
  64.         fclose($fp); 
  65.     } 
  66.  
  67. //更新服務器文件      目錄路徑   域名/data/admin/config_update.php 
  68. require_once (DEDEDATA.'/admin/config_update.php'); 
  69.  
  70. //如果 $dopost=='showad' 
  71. if ($dopost=='showad'
  72. {   //引入登陸界面的廣告 
  73.     include('templets/login_ad.htm'); 
  74.     exit
  75.  
  76. //檢測後臺目錄是否更名       GetCurUrl() 獲得當前的腳本網址 
  77. $cururl = GetCurUrl(); 
  78. //匹配正則     進行正則表達式匹配。並且只匹配一次 
  79. /** 
  80.  * int preg_match( string pattern, string subject [, array matches [, int flags]] ) 
  81.  * 在 subject 字符串中搜索與pattern給出的正則表達式相匹配的內容。 
  82.  * 如果提供了 matches,則其會被搜索的結果所填充。$matches[0] 將包含與整個模式匹配的文本,$matches[1] 將包含與第一個捕獲的括號中的子模式所匹配的文本,以此類推。 
  83.  * flags 可以是下列標記: 
  84.  * PREG_OFFSET_CAPTURE如果設定本標記,對每個出現的匹配結果也同時返回其附屬的字符串偏移量。注意這改變了返回的數組的值,使其中的每個單元也是一個數組,其中第一項爲匹配字符串,第二項爲其偏移量。本標記自PHP 4.3.0 起可用。 
  85.  * flags 參數來自 PHP 4.3.0 起可用。 
  86.  * preg_match() 返回 pattern 所匹配的次數。要麼是 0 次(沒有匹配)或 1 次,因爲 preg_match() 在第一次匹配之後將停止搜索。如果出錯 preg_match() 返回FALSE。 
  87.  */ 
  88. if(preg_match('/dede\/login/i',$cururl)) 
  89.     $redmsg = '<div class=\'safe-tips\'>您的管理目錄的名稱中包含默認名稱dede,建議在FTP裏把它修改爲其它名稱,那樣會更安全!</div>'
  90. else 
  91.     $redmsg = ''
  92.  
  93. //登錄檢測 
  94. $admindirs = explode('/',str_replace("\\",'/',dirname(__FILE__))); 
  95. $admindir = $admindirs[count($admindirs)-1]; 
  96. //以下是點擊登陸按鈕的時候執行的 
  97. if($dopost=='login'
  98.     $validate = emptyempty($validate) ? '' : strtolower(trim($validate)); 
  99.     //獲取驗證碼的session值   GetCkVdValue() 
  100.     $svali = strtolower(GetCkVdValue()); 
  101.     if(($validate=='' || $validate != $svali) && preg_match("/6/",$safe_gdopen)){ 
  102.         //php版本有bug時候執行 
  103.         ResetVdValue(); 
  104.         ShowMsg('驗證碼不正確!','login.php',0,1000); 
  105.         exit
  106.     } else { 
  107.         //new一個登陸的對象 
  108.         $cuserLogin = new userLogin($admindir); 
  109.         //判斷userid和pwd不爲空 
  110.         if(!emptyempty($userid) && !emptyempty($pwd)) 
  111.         {   //checkUser  檢驗用戶是否正確 
  112.             $res = $cuserLogin->checkUser($userid,$pwd); 
  113.  
  114.             //success 
  115.             if($res==1) 
  116.             {   // keepUser保持用戶的會話狀態 
  117.                 $cuserLogin->keepUser(); 
  118.                 if(!emptyempty($gotopage)) 
  119.                 { 
  120.                     ShowMsg('成功登錄,正在轉向管理管理主頁!',$gotopage); 
  121.                     exit(); 
  122.                 } 
  123.                 else 
  124.                 { 
  125.                     ShowMsg('成功登錄,正在轉向管理管理主頁!',"index.php"); 
  126.                     exit(); 
  127.                 } 
  128.             } 
  129.  
  130.             //error 
  131.             else if($res==-1) 
  132.             { 
  133.                 ShowMsg('你的用戶名不存在!',-1,0,1000); 
  134.                 exit
  135.             } 
  136.             else 
  137.             { 
  138.                 ShowMsg('你的密碼錯誤!',-1,0,1000); 
  139.                 exit
  140.             } 
  141.         } 
  142.  
  143.         //password empty 
  144.         else 
  145.         { 
  146.             ShowMsg('用戶和密碼沒填寫完整!',-1,0,1000); 
  147.             exit
  148.         } 
  149.     } 
  150.  
  151. //引入登陸模板  目錄路徑  域名/dede/templets/login.htm 
  152. include('templets/login.htm'); 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章