PHP安全技術(shù)之 實現(xiàn)php基本安全
更新時間:2010年09月04日 01:18:29 作者:
php開發(fā)過程中,需要注意的一些安全小細節(jié),屏蔽錯誤提示,多考慮下安全問題。
1.不要依賴注冊全局變量功能(register_globals)
注冊全局變量的出現(xiàn)曾經(jīng)讓PHP變得非常易用,但也降低了安全性(方便之處經(jīng)常會破壞安全性)。建議在編程時把register_globals指令關(guān)閉,在PHP6中這個功能也會被取消。
2.在使用變量之前對其進行初始化。
如果register_globals功能是啟動的,即使程序員不使用它,惡意用戶也可能利用為初始化變量的漏洞來侵入我們的系統(tǒng)。比如:
if(conditon){
$auth=TRUE;
}
如果變量$auth沒有在這段之前被初始化為FALSE,那么用戶就可以向腳本傳遞$_GET[‘a(chǎn)uth']、$_POST[‘a(chǎn)uth']或$_COOKIE[‘a(chǎn)uth']輕易的實現(xiàn)驗證。
3.檢驗和凈化全部輸入數(shù)據(jù)。
4.在利用變量引用包含文件時要小心。
如果腳本中有這樣的代碼:
require($page);
那么就應該確保$page不會來自外部資源(比如$_GET),或者,如果它的確來自于外部資源,那么就要確保它包含適當?shù)闹怠?
5.在使用任何服務器上執(zhí)行命令的函數(shù)都要多加小心。
這些函數(shù)包括eval()、exec()、system()、passthru()、popen()和反撇號(``)。這些函數(shù)都能夠在服務器上執(zhí)行命令,永遠都不要隨意使用。如果在命令里不得不包含便來那個,就應該對這個變量進行徹底的安全檢查。還應該使用escapeshellarg() escapeshellcom()進行額外的預處理。
6.更改默認的會話目錄,或者使用數(shù)據(jù)庫保存會話數(shù)據(jù)。
7.不要使用瀏覽器提供的文件名在服務器上保存上傳的文件。
8.如果被提交的數(shù)據(jù)需要在web頁面中重新顯示,一定要注意其中的HTML,更重要的是JAVASCRIPT
可以利用函數(shù)
string htmlspecialchars ( string string [, int quote_style [, string charset]])
對提交的數(shù)據(jù)進行處理
9。不要在站點上暴露你的PHP錯誤信息
PHP錯誤信息能夠在你開發(fā)的過程中把錯誤信息輸出方便你的檢查,但是如果暴露在Web上面,很可以成為攻擊者的入口。
10.防止SQL注入攻擊。
應該使用特定語言的數(shù)據(jù)庫轉(zhuǎn)義函數(shù),比如mysqli_real_escape_data(),確保提交的內(nèi)容不會破壞查詢操作。
11.永遠不要在服務器上保存phpinfo()腳本。
注冊全局變量的出現(xiàn)曾經(jīng)讓PHP變得非常易用,但也降低了安全性(方便之處經(jīng)常會破壞安全性)。建議在編程時把register_globals指令關(guān)閉,在PHP6中這個功能也會被取消。
2.在使用變量之前對其進行初始化。
如果register_globals功能是啟動的,即使程序員不使用它,惡意用戶也可能利用為初始化變量的漏洞來侵入我們的系統(tǒng)。比如:
if(conditon){
$auth=TRUE;
}
如果變量$auth沒有在這段之前被初始化為FALSE,那么用戶就可以向腳本傳遞$_GET[‘a(chǎn)uth']、$_POST[‘a(chǎn)uth']或$_COOKIE[‘a(chǎn)uth']輕易的實現(xiàn)驗證。
3.檢驗和凈化全部輸入數(shù)據(jù)。
4.在利用變量引用包含文件時要小心。
如果腳本中有這樣的代碼:
require($page);
那么就應該確保$page不會來自外部資源(比如$_GET),或者,如果它的確來自于外部資源,那么就要確保它包含適當?shù)闹怠?
5.在使用任何服務器上執(zhí)行命令的函數(shù)都要多加小心。
這些函數(shù)包括eval()、exec()、system()、passthru()、popen()和反撇號(``)。這些函數(shù)都能夠在服務器上執(zhí)行命令,永遠都不要隨意使用。如果在命令里不得不包含便來那個,就應該對這個變量進行徹底的安全檢查。還應該使用escapeshellarg() escapeshellcom()進行額外的預處理。
6.更改默認的會話目錄,或者使用數(shù)據(jù)庫保存會話數(shù)據(jù)。
7.不要使用瀏覽器提供的文件名在服務器上保存上傳的文件。
8.如果被提交的數(shù)據(jù)需要在web頁面中重新顯示,一定要注意其中的HTML,更重要的是JAVASCRIPT
可以利用函數(shù)
string htmlspecialchars ( string string [, int quote_style [, string charset]])
對提交的數(shù)據(jù)進行處理
9。不要在站點上暴露你的PHP錯誤信息
PHP錯誤信息能夠在你開發(fā)的過程中把錯誤信息輸出方便你的檢查,但是如果暴露在Web上面,很可以成為攻擊者的入口。
10.防止SQL注入攻擊。
應該使用特定語言的數(shù)據(jù)庫轉(zhuǎn)義函數(shù),比如mysqli_real_escape_data(),確保提交的內(nèi)容不會破壞查詢操作。
11.永遠不要在服務器上保存phpinfo()腳本。
相關(guān)文章
PHP實現(xiàn)的redis主從數(shù)據(jù)庫狀態(tài)檢測功能示例
這篇文章主要介紹了PHP實現(xiàn)的redis主從數(shù)據(jù)庫狀態(tài)檢測功能,涉及php針對多個redis主從數(shù)據(jù)庫的連接、檢測、錯誤信息輸出及郵件發(fā)送相關(guān)操作技巧,需要的朋友可以參考下2017-07-07php中cookie實現(xiàn)二級域名可訪問操作的方法
這篇文章主要介紹了php中cookie實現(xiàn)二級域名可訪問操作的方法,對比了常用的setcookie函數(shù)用法,并給出了一個設置cookie的類文件來實現(xiàn)這一功能,是非常實用的技巧,需要的朋友可以參考下2014-11-11Ext.data.PagingMemoryProxy分頁一次性讀取數(shù)據(jù)的實現(xiàn)代碼
Ext.data.PagingMemoryProxy分頁一次性讀取數(shù)據(jù)的實現(xiàn)代碼,需要的朋友可以參考下。2010-04-04php中debug_backtrace、debug_print_backtrace和匿名函數(shù)用法實例
這篇文章主要介紹了php中debug_backtrace、debug_print_backtrace和匿名函數(shù)用法,以實例形式分析了debug_backtrace和debug_print_backtrace函數(shù)在調(diào)試過程中的作用,并分析了PHP5.3新增匿名函數(shù)的用法,需要的朋友可以參考下2014-12-12PHP采用XML-RPC構(gòu)造Web Service實例教程
這篇文章主要介紹了PHP采用XML-RPC構(gòu)造Web Service,需要的朋友可以參考下2014-07-07