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ì)用戶輸入進(jìn)行清理的一個(gè)簡(jiǎn)單方法是,使用正則表達(dá)式來(lái)處理它。
規(guī)則 2:禁用那些使安全性難以實(shí)施的 PHP 設(shè)置
已經(jīng)知道了不能信任用戶輸入,還應(yīng)該知道不應(yīng)該信任機(jī)器上配置 PHP 的方式。例如,要確保禁用 register_globals。如果啟用了 register_globals,就可能做一些粗心的事情,比如使用 $variable 替換同名的 GET 或 POST 字符串。通過(guò)禁用這個(gè)設(shè)置,PHP 強(qiá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 查詢使用轉(zhuǎn)義的用戶輸入。
縱深防御不只是一種好思想,它可以確保您不會(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ì)用戶輸入進(jìn)行清理的一個(gè)簡(jiǎn)單方法是,使用正則表達(dá)式來(lái)處理它。
規(guī)則 2:禁用那些使安全性難以實(shí)施的 PHP 設(shè)置
已經(jīng)知道了不能信任用戶輸入,還應(yīng)該知道不應(yīng)該信任機(jī)器上配置 PHP 的方式。例如,要確保禁用 register_globals。如果啟用了 register_globals,就可能做一些粗心的事情,比如使用 $variable 替換同名的 GET 或 POST 字符串。通過(guò)禁用這個(gè)設(shè)置,PHP 強(qiá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 查詢使用轉(zhuǎn)義的用戶輸入。
縱深防御不只是一種好思想,它可以確保您不會(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 mysql操作mysql_connect連接數(shù)據(jù)庫(kù)實(shí)例詳解
php操作數(shù)據(jù)庫(kù)首先必須連接到指定的數(shù)據(jù)庫(kù),連接數(shù)據(jù)庫(kù)可以使用PHP mysql_connect函數(shù),本文章向大家介紹mysql_connect函數(shù)的使用方法和實(shí)例,需要的朋友可以參考一下2016-12-12PHP MVC模式在網(wǎng)站架構(gòu)中的實(shí)現(xiàn)分析
MVC模式在網(wǎng)站架構(gòu)中十分常見(jiàn)。它允許我們建立一個(gè)三層結(jié)構(gòu)的應(yīng)用程式,從代碼中分離出有用的層,幫助設(shè)計(jì)師和開(kāi)發(fā)者協(xié)同工作以及提高我們維護(hù)和擴(kuò)展既有程式的能力。2010-03-03PHP實(shí)現(xiàn)的mysql讀寫(xiě)分離操作示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的mysql讀寫(xiě)分離操作,簡(jiǎn)單講述了mysql讀寫(xiě)分離的原理,并結(jié)合實(shí)例形式給出了php針對(duì)mysql的讀寫(xiě)sql語(yǔ)句操作不同數(shù)據(jù)庫(kù)的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-05-05