因為配置不當引發的安全問題是屢見不鮮的,通過一系列的安全配置,可以很好的解決一些安全隱患,從而為系統增加安全系數。但是在開發過程中,因為需求的改變和編程的習慣可能會更改一些配置同時帶來安全隱患。在這種情況下,需要更加的了解配置帶來的安全隱患,也就是漏洞的產生原理。同時需要了解在打開一些配置安全隱患之后,該如何通過一些其他手段解決安全問題是我們重點需要討論的問題。
0×01注冊html' target='_blank'>全局變量帶來的安全隱患register_globals這個是開啟全局注冊變量功能,為On是開啟,Off是關閉。在開啟后帶來的安全隱患是巨大的,所以建議關閉。如果在需求上需要開啟,在02里會有具體介紹該如何防御。
配置規范:register_globals要設置為off,在php4.2.0后默認為off,如果為on,需要為每個變量初始化
功能描述:get,post,cookie等變量直接被注冊為全局變量,比如表單的username,程序中使用$username就能獲取到值,不需$_POST來獲取值
安全隱患樣例:
這里如果沒有通過cooke認證,那$authorized將一直為假,就無法被認證,但是如果register_globals為on,那么我們在url里可以修改get參數讓$authorized注冊為全局變量,并修改它的值為真,比如http://xxx/test.php?authorized=1,這樣就繞過了認證。
0×02初始化變量和配置預警提高安全系數如果有需求要開啟注冊全局變量,那我們該如何防御呢?這里我們介紹兩個辦法,一個是初始化變量,和配置最高預警信息,下面讓我們看看具體如何操作。在這里我們初始化了$authorized的值為假,即使傳入了真也不會改變
比如:
所以我們只要初始化$authorized的值,就不會出現繞過的問題,但是有的時候會忘記初始化變量,沒關系,可以配置預警模式,如果有未初始化的,就會預警,可以在php.ini中設置 error_reporting 設置為 E_ALL|E_STRICT最高級別,這樣如果哪個變量未初始化,報錯就會預警。
0×03 配置不顯示錯誤信息,保存錯誤信息到本地黑客在滲透過程中,因為錯誤信息的暴露,給黑客提供了很大的利用便利條件,所以在開發過程中,我們可以為了編程的方便,需要開啟錯誤信息提示到瀏覽器,但是在程序上線后,我們一定要關閉錯誤信息提示,這里提供一種一舉兩得的方式,關閉瀏覽器顯示錯誤提示,記錄錯誤提示到本地日志中。這些設置可以在php.ini中設置,也可以在php程序中設置。
關于權限問題始終是一個容易被忽略的問題,程序員往往在乎程序功能上是否實現了,的確容易在功能上過大的給予一些權限照成一些安全隱患。比如我們在上傳過程中,可能只需要寫權限和執行權限,但是我們又多給了個讀權限。即便我們做了過濾,即便我們做了混淆,但是安全不是絕對的,一個環節的疏忽就容易照成不可挽回的損失。下面讓我們看一個案例
案例分析:
這是一個上傳功能,這里的功能需求只需要寫權限和執行權限,可以看到,只用了getimagesize做了圖片認證,這里只需要改下文件類型就可以簡單繞過上傳一個php的木馬,但是同時對上傳的文件名重新命名成了隨機名,所以攻擊者不知道源碼很難逆向文件名來解析php木馬。
但是我們又多給了讀取權限,會有什么樣的安全隱患呢?比如這個程序里有這樣一個功能
這里是一個ping的功能,即使做了一些過濾,但是因為過濾不全,沒有過濾&,{,}等符號,
可以這樣繞過從這張圖片可以看到,我們本來不需要讀權限,但是因為給了讀權限,讓攻擊者在這里可以讀到文件名甚至其他一些操作,從這兩點的結合,攻擊者可以很輕易獲取到程序的權限從而帶來很嚴重的信息泄露等問題。所以回到我們討論的問題,最小權限問題,這里在需求上完全不需要讀權限,但是因為讀權限的開啟,照成了嚴重的損失,所以,能不給的權限不要給,給過的權限,一定要做好過濾等防御措施。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答