PHP 編程安全性小結(jié)
更新時(shí)間:2010年01月08日 23:53:44 作者:
PHP 編程安全性小結(jié),這4個(gè)小技巧,大家可以參考一些成熟的cms程序。如dedecms等
規(guī)則 1:絕不要信任外部數(shù)據(jù)或輸入
關(guān)于 Web 應(yīng)用程序安全性,必須認(rèn)識(shí)到的第一件事是不應(yīng)該信任外部數(shù)據(jù)。外部數(shù)據(jù)(outside data) 包括不是由程序員在 PHP 代碼中直接輸入的任何數(shù)據(jù)。在采取措施確保安全之前,來(lái)自任何其他來(lái)源(比如 GET 變量、表單 POST、數(shù)據(jù)庫(kù)、配置文件、會(huì)話變量或 cookie)的任何數(shù)據(jù)都是不可信任的。
對(duì)用戶(hù)輸入進(jìn)行清理的一個(gè)簡(jiǎn)單方法是,使用正則表達(dá)式來(lái)處理它。
規(guī)則 2:禁用那些使安全性難以實(shí)施的 PHP 設(shè)置
已經(jīng)知道了不能信任用戶(hù)輸入,還應(yīng)該知道不應(yīng)該信任機(jī)器上配置 PHP 的方式。例如,要確保禁用 register_globals。如果啟用了 register_globals,就可能做一些粗心的事情,比如使用 $variable 替換同名的 GET 或 POST 字符串。通過(guò)禁用這個(gè)設(shè)置,PHP 強(qiáng)迫您在正確的名稱(chēng)空間中引用正確的變量。要使用來(lái)自表單 POST 的變量,應(yīng)該引用 $_POST['variable']。這樣就不會(huì)將這個(gè)特定變量誤會(huì)成 cookie、會(huì)話或 GET 變量。
要 檢查的第二個(gè)設(shè)置是錯(cuò)誤報(bào)告級(jí)別。在開(kāi)發(fā)期間,希望獲得盡可能多的錯(cuò)誤報(bào)告,但是在交付項(xiàng)目時(shí),希望將錯(cuò)誤記錄到日志文件中,而不是顯示在屏幕上。為什么 呢?因?yàn)閻阂獾暮诳蜁?huì)使用錯(cuò)誤報(bào)告信息(比如 SQL 錯(cuò)誤)來(lái)猜測(cè)應(yīng)用程序正在做什么。這種偵察可以幫助黑客突破應(yīng)用程序。為了堵住這個(gè)漏洞,需要編輯 php.ini 文件,為 error_log 條目提供合適的目的地,并將 display_errors 設(shè)置為 Off。
規(guī)則 3:如果不能理解它,就不能保護(hù)它
一些開(kāi)發(fā)人員使用奇怪的語(yǔ)法,或者將語(yǔ)句組織得很緊湊,形成簡(jiǎn)短但是含義模糊的代碼。這種方式可能效率高,但是如果您不理解代碼正在做什么,那么就無(wú)法決定如何保護(hù)它。
規(guī)則 4:“縱深防御” 是新的法寶
即使使用 PHP regex 來(lái)確保 GET 變量完全是數(shù)字的,仍然可以采取措施確保 SQL 查詢(xún)使用轉(zhuǎn)義的用戶(hù)輸入。
縱深防御不只是一種好思想,它可以確保您不會(huì)陷入嚴(yán)重的麻煩。
關(guān)于 Web 應(yīng)用程序安全性,必須認(rèn)識(shí)到的第一件事是不應(yīng)該信任外部數(shù)據(jù)。外部數(shù)據(jù)(outside data) 包括不是由程序員在 PHP 代碼中直接輸入的任何數(shù)據(jù)。在采取措施確保安全之前,來(lái)自任何其他來(lái)源(比如 GET 變量、表單 POST、數(shù)據(jù)庫(kù)、配置文件、會(huì)話變量或 cookie)的任何數(shù)據(jù)都是不可信任的。
對(duì)用戶(hù)輸入進(jìn)行清理的一個(gè)簡(jiǎn)單方法是,使用正則表達(dá)式來(lái)處理它。
規(guī)則 2:禁用那些使安全性難以實(shí)施的 PHP 設(shè)置
已經(jīng)知道了不能信任用戶(hù)輸入,還應(yīng)該知道不應(yīng)該信任機(jī)器上配置 PHP 的方式。例如,要確保禁用 register_globals。如果啟用了 register_globals,就可能做一些粗心的事情,比如使用 $variable 替換同名的 GET 或 POST 字符串。通過(guò)禁用這個(gè)設(shè)置,PHP 強(qiáng)迫您在正確的名稱(chēng)空間中引用正確的變量。要使用來(lái)自表單 POST 的變量,應(yīng)該引用 $_POST['variable']。這樣就不會(huì)將這個(gè)特定變量誤會(huì)成 cookie、會(huì)話或 GET 變量。
要 檢查的第二個(gè)設(shè)置是錯(cuò)誤報(bào)告級(jí)別。在開(kāi)發(fā)期間,希望獲得盡可能多的錯(cuò)誤報(bào)告,但是在交付項(xiàng)目時(shí),希望將錯(cuò)誤記錄到日志文件中,而不是顯示在屏幕上。為什么 呢?因?yàn)閻阂獾暮诳蜁?huì)使用錯(cuò)誤報(bào)告信息(比如 SQL 錯(cuò)誤)來(lái)猜測(cè)應(yīng)用程序正在做什么。這種偵察可以幫助黑客突破應(yīng)用程序。為了堵住這個(gè)漏洞,需要編輯 php.ini 文件,為 error_log 條目提供合適的目的地,并將 display_errors 設(shè)置為 Off。
規(guī)則 3:如果不能理解它,就不能保護(hù)它
一些開(kāi)發(fā)人員使用奇怪的語(yǔ)法,或者將語(yǔ)句組織得很緊湊,形成簡(jiǎn)短但是含義模糊的代碼。這種方式可能效率高,但是如果您不理解代碼正在做什么,那么就無(wú)法決定如何保護(hù)它。
規(guī)則 4:“縱深防御” 是新的法寶
即使使用 PHP regex 來(lái)確保 GET 變量完全是數(shù)字的,仍然可以采取措施確保 SQL 查詢(xún)使用轉(zhuǎn)義的用戶(hù)輸入。
縱深防御不只是一種好思想,它可以確保您不會(huì)陷入嚴(yán)重的麻煩。
您可能感興趣的文章:
- Apache下禁止特定目錄執(zhí)行PHP 提高服務(wù)器安全性
- php下過(guò)濾html代碼的函數(shù) 提高程序安全性
- PHP session會(huì)話的安全性分析
- PHP安全性漫談
- 解析php安全性問(wèn)題中的:Null 字符問(wèn)題
- Session的工作機(jī)制詳解和安全性問(wèn)題(PHP實(shí)例講解)
- PHP臨時(shí)文件的安全性分析
- 淺談php安全性需要注意的幾點(diǎn)事項(xiàng)
- PHP中使用addslashes函數(shù)轉(zhuǎn)義的安全性原理分析
- 制作安全性高的PHP網(wǎng)站的幾個(gè)實(shí)用要點(diǎn)
相關(guān)文章
PHP實(shí)現(xiàn)圖的鄰接矩陣表示及幾種簡(jiǎn)單遍歷算法分析
這篇文章主要介紹了PHP實(shí)現(xiàn)圖的鄰接矩陣表示及幾種簡(jiǎn)單遍歷算法,結(jié)合實(shí)例形式分析了php基于鄰接矩陣實(shí)現(xiàn)圖的定義及相關(guān)遍歷操作技巧,需要的朋友可以參考下2017-11-11
php Yii2框架創(chuàng)建定時(shí)任務(wù)方法詳解
Yii2是一個(gè)基于組件、用于開(kāi)發(fā)大型Web應(yīng)用的高性能PHP框架,采用嚴(yán)格的OOP編寫(xiě),并有著完善的庫(kù)引用以及全面的教程,該框架提供了Web 2.0應(yīng)用開(kāi)發(fā)所需要的幾乎一切功能,是最有效率的PHP框架之一2022-09-09
PHP入門(mén)教程之面向?qū)ο蠡靖拍顚?shí)例分析
這篇文章主要介紹了PHP入門(mén)教程之面向?qū)ο蠡靖拍?結(jié)合實(shí)例形式簡(jiǎn)單分析了php面向?qū)ο笏婕暗念?lèi)的定義、對(duì)象的創(chuàng)建、構(gòu)造函數(shù)、成員變量、成員方法等,需要的朋友可以參考下2016-09-09
php中html_entity_decode實(shí)現(xiàn)HTML實(shí)體轉(zhuǎn)義
這篇文章主要介紹了php中html_entity_decode實(shí)現(xiàn)HTML實(shí)體轉(zhuǎn)義的相關(guān)資料,需要的朋友可以參考下2018-06-06
php利用scws實(shí)現(xiàn)mysql全文搜索功能的方法
這篇文章主要介紹了php利用scws實(shí)現(xiàn)mysql全文搜索功能的方法,可通過(guò)scws分詞插件的擴(kuò)展來(lái)實(shí)現(xiàn)MySQL全文搜索功能,是非常實(shí)用的技巧,需要的朋友可以參考下2014-12-12

