PHP的5個安全措施小結(jié)
更新時間:2012年07月17日 20:52:18 作者:
多年來,PHP一直是一個穩(wěn)定的、廉價的運(yùn)行基于web應(yīng)用程序的平臺。像大多數(shù)基于web的平臺一樣,PHP也是容易受到外部攻擊的
開發(fā)人員、數(shù)據(jù)庫架構(gòu)師和系統(tǒng)管理員在部署PHP應(yīng)用程序到服務(wù)器之前都應(yīng)該采取預(yù)防措施。大部分預(yù)防措施可以通過幾行代碼或者把應(yīng)用程序設(shè)置稍作調(diào)整即可完成。
#1:管理安裝腳本
如果開發(fā)人員已經(jīng)安裝了一套第三方應(yīng)用程序的PHP腳本,該腳本用于安裝整個應(yīng)用程序的工作組件,并提供一個接入點(diǎn)。大多數(shù)第三方軟件包都建議在安裝后,刪除該目錄包含的安裝腳本。但開發(fā)人員希望保留安裝腳本,他們可以創(chuàng)建一個.htaccess文件來控制管理訪問目錄。
AuthType Basic
AuthName “Administrators Only”
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
任何未經(jīng)授權(quán)的用戶,如果試圖訪問一個受保護(hù)的目錄,將會看到一個提示,要求輸入用戶名和密碼。密碼必須匹配指定的“passwords”文件中的密碼。
#2:頭文件
在很多情況下,開發(fā)人員可以將分布在應(yīng)用程序的幾個腳本包含進(jìn)一個腳本里。這些腳本將包含一個“include”指令,集成單個文件到原始頁面的代碼里。當(dāng)“include”文件包含敏感信息,包括用戶名、密碼和數(shù)據(jù)庫訪問密鑰時,該文件的擴(kuò)展名應(yīng)該命名成“.php ",而不是典型的“.inc”擴(kuò)展。“.php”擴(kuò)展確保php引擎將處理該文件,并防止任何未經(jīng)授權(quán)的訪問。
#3: MD5 vs. SHA
在某些情況下,用戶最終會創(chuàng)建自己的用戶名和密碼,而站點(diǎn)管理員通常會對表單提交的密碼加密,并保存在數(shù)據(jù)庫中。在過去的幾年中,開發(fā)人員會使用MD5(消息摘要算法)函數(shù),加密成一個128位的字符串密碼。今天,很多開發(fā)人員使用SHA-1(安全散列算法)函數(shù)來創(chuàng)建一個160位的字符串。
#4: 自動全局變量
php.ini文件中包含的設(shè)置稱為“register_globals”。P服務(wù)器會根據(jù)register_globals的設(shè)置,將會為服務(wù)器變量和查詢字符串自動創(chuàng)建全局變量。在安裝第三方的軟件包時,比如內(nèi)容管理軟件,像Joomla和Drupal,安裝腳本將引導(dǎo)用戶把register_globals設(shè)置為“關(guān)閉”。將設(shè)置改變?yōu)椤瓣P(guān)閉”可以確保未經(jīng)授權(quán)的用戶無法通過猜測變量名稱及驗證密碼來訪問數(shù)據(jù)。
#5: 初始化變量和值
許多開發(fā)人員都落入了實(shí)例化變量不賦值的陷阱,原因可能由于時間的限制而分心,或缺乏努力。身份驗證過程中的變量,應(yīng)該在用戶登錄程序開始前就有值。這個簡單的步驟可以防止用戶繞過驗證程序或訪問站點(diǎn)中某些他們沒有權(quán)限的區(qū)域
#1:管理安裝腳本
如果開發(fā)人員已經(jīng)安裝了一套第三方應(yīng)用程序的PHP腳本,該腳本用于安裝整個應(yīng)用程序的工作組件,并提供一個接入點(diǎn)。大多數(shù)第三方軟件包都建議在安裝后,刪除該目錄包含的安裝腳本。但開發(fā)人員希望保留安裝腳本,他們可以創(chuàng)建一個.htaccess文件來控制管理訪問目錄。
AuthType Basic
AuthName “Administrators Only”
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
任何未經(jīng)授權(quán)的用戶,如果試圖訪問一個受保護(hù)的目錄,將會看到一個提示,要求輸入用戶名和密碼。密碼必須匹配指定的“passwords”文件中的密碼。
#2:頭文件
在很多情況下,開發(fā)人員可以將分布在應(yīng)用程序的幾個腳本包含進(jìn)一個腳本里。這些腳本將包含一個“include”指令,集成單個文件到原始頁面的代碼里。當(dāng)“include”文件包含敏感信息,包括用戶名、密碼和數(shù)據(jù)庫訪問密鑰時,該文件的擴(kuò)展名應(yīng)該命名成“.php ",而不是典型的“.inc”擴(kuò)展。“.php”擴(kuò)展確保php引擎將處理該文件,并防止任何未經(jīng)授權(quán)的訪問。
#3: MD5 vs. SHA
在某些情況下,用戶最終會創(chuàng)建自己的用戶名和密碼,而站點(diǎn)管理員通常會對表單提交的密碼加密,并保存在數(shù)據(jù)庫中。在過去的幾年中,開發(fā)人員會使用MD5(消息摘要算法)函數(shù),加密成一個128位的字符串密碼。今天,很多開發(fā)人員使用SHA-1(安全散列算法)函數(shù)來創(chuàng)建一個160位的字符串。
#4: 自動全局變量
php.ini文件中包含的設(shè)置稱為“register_globals”。P服務(wù)器會根據(jù)register_globals的設(shè)置,將會為服務(wù)器變量和查詢字符串自動創(chuàng)建全局變量。在安裝第三方的軟件包時,比如內(nèi)容管理軟件,像Joomla和Drupal,安裝腳本將引導(dǎo)用戶把register_globals設(shè)置為“關(guān)閉”。將設(shè)置改變?yōu)椤瓣P(guān)閉”可以確保未經(jīng)授權(quán)的用戶無法通過猜測變量名稱及驗證密碼來訪問數(shù)據(jù)。
#5: 初始化變量和值
許多開發(fā)人員都落入了實(shí)例化變量不賦值的陷阱,原因可能由于時間的限制而分心,或缺乏努力。身份驗證過程中的變量,應(yīng)該在用戶登錄程序開始前就有值。這個簡單的步驟可以防止用戶繞過驗證程序或訪問站點(diǎn)中某些他們沒有權(quán)限的區(qū)域
相關(guān)文章
php實(shí)現(xiàn)讀取手機(jī)客戶端瀏覽器的類
這篇文章主要介紹了php實(shí)現(xiàn)讀取手機(jī)客戶端瀏覽器的類,可實(shí)現(xiàn)取手機(jī)號碼,瀏覽器報頭信息,取得手機(jī)類型,取得手機(jī)IP等功能,需要的朋友可以參考下2015-01-01php FPDF類庫應(yīng)用實(shí)現(xiàn)代碼
php FPDF類庫應(yīng)用實(shí)現(xiàn)代碼2009-03-03php實(shí)現(xiàn)常見圖片格式的水印和縮略圖制作(面向?qū)ο?
這篇文章主要介紹了php實(shí)現(xiàn)常見圖片格式j(luò)pg,png,gif的水印和縮略圖制作,使用面向?qū)ο蠓椒▽?shí)現(xiàn)PHP圖片水印和縮略圖功能,感興趣的小伙伴們可以參考一下2016-06-06PHP實(shí)現(xiàn)的各種進(jìn)制相互轉(zhuǎn)換功能小工具示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的各種進(jìn)制相互轉(zhuǎn)換功能小工具,涉及php常見的二進(jìn)制、八進(jìn)制、十六進(jìn)制等相互轉(zhuǎn)換操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-03-03PHP實(shí)現(xiàn)獲取第一個中文首字母并進(jìn)行排序的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)獲取第一個中文首字母并進(jìn)行排序的方法,涉及php數(shù)組遍歷、編碼轉(zhuǎn)換及數(shù)組排序相關(guān)操作技巧,需要的朋友可以參考下2017-05-05PHP的Yii框架中Model模型的學(xué)習(xí)教程
這篇文章主要介紹了PHP的Yii框架中Model模型的學(xué)習(xí)教程,Yii框架本身就顯龐大,所以模型類也就更加需要很好的編寫維護(hù),需要的朋友可以參考下2016-03-03