開發人員、數據庫架構師和系統管理員在部署PHP應用程序到服務器之前都應該采取預防措施。大部分預防措施可以通過幾行代碼或者把應用程序設置稍作調整即可完成。
#1:管理安裝腳本
如果開發人員已經安裝了一套第三方應用程序的PHP腳本,該腳本用於安裝整個應用程序的工作組件,並提供一個接入點。大多數第三方軟件包都建議在安裝後,刪除該目錄包含的安裝腳本。但開發人員希望保留安裝腳本,他們可以創建一個.htaccess文件來控制管理訪問目錄。
AuthType Basic
AuthName “Administrators Only”
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
任何未經授權的用戶,如果試圖訪問一個受保護的目錄,將會看到一個提示,要求輸入用戶名和密碼。密碼必須匹配指定的“passwords”文件中的密碼。
#2:頭文件 在很多情況下,開發人員可以將分布在應用程序的幾個腳本包含進一個腳本裡。這些腳本將包含一個“include”指令,集成單個文件到原始頁面的代碼裡。當“include”文件包含敏感信息,包括用戶名、密碼和數據庫訪問密鑰時,該文件的擴展名應該命名成“.php ",而不是典型的“.inc”擴展。“.php”擴展確保php引擎將處理該文件,並防止任何未經授權的訪問。
#3: MD5 vs. SHA
在某些情況下,用戶最終會創建自己的用戶名和密碼,而站點管理員通常會對表單提交的密碼加密,並保存在數據庫中。在過去的幾年中,開發人員會使用MD5(消息摘要算法)函數,加密成一個128位的字符串密碼。今天,很多開發人員使用SHA-1(安全散列算法)函數來創建一個160位的字符串。
#4: 自動全局變量
php.ini文件中包含的設置稱為“register_globals”。P服務器會根據register_globals的設置,將會為服務器變量和查詢字符串自動創建全局變量。在安裝第三方的軟件包時,比如內容管理軟件,像Joomla和Drupal,安裝腳本將引導用戶把register_globals設置為“關閉”。將設置改變為“關閉”可以確保未經授權的用戶無法通過猜測變量名稱及驗證密碼來訪問數據。
#5: 初始化變量和值
許多開發人員都落入了實例化變量不賦值的陷阱,原因可能由於時間的限制而分心,或缺乏努力。身份驗證過程中的變量,應該在用戶登錄程序開始前就有值。這個簡單的步驟可以防止用戶繞過驗證程序或訪問站點中某些他們沒有權限的區域