本文介紹了lnmp架構下php安全配置的方法,包括禁用不安全PHP函數、關閉php錯誤記錄檔、php上傳分離、關閉php資訊、禁止動態載入連結庫、禁用開啟遠程url等安全措施。 php安全配置的幾個方面: 1、使用open_basedir限制虛擬機器主機跨目錄訪問 [HOST=www.xingzuo51.com]open_basedir=/data/site/www.xingzuo51.com/:/tmp/[HOST=test.xingzuo51.com]open_basedir=/data/site/test.xingzuo51.com/:/tmp/說明:www.xingzuo51.com下的php程式被限制在open_basedir配置的兩個目錄下, 不可以訪問到其他目錄。如果沒有做以上的配置,那麼test.xingzuo51.com與www.xingzuo51.com的程式可以互相訪問。如果其中一個網站有漏洞被駭客植入了webshell,可以通過這個網站拿下同一台伺服器的其他網站,最後掛木馬。 注意:目錄最後一定要加上/。比如寫/tmp,網站同時存在/tmp123等等以/tmp開頭的目錄,那麼駭客也可以訪問到這些目錄,另外, php5.3以上支援這個寫法,5.2不支援。 2、禁用不安全PHP函數disable_functions = show_source,system,shell_exec,passthru,exec,popen,proc_open,proc_get_status,phpinfo禁止php執行以上php函數,以上php程式可以執行linux命令, 比如可以執行ping、netstat、mysql等等.如果你的系統有提權bug,後果你懂得. 3、關注軟體安全資訊積極關注linux核心、php安全等資訊並及時採取錯誤 4、php使用者唯讀這 個方法是我最推崇的方法,但是執行之前一定要和php工程師商量. 為什嗎?例如網站www.xingzuo51.com根目錄使用者與組為nobody,而運行php的使用者和組為phpuser。目錄許可權為755,檔案許可權為 644. 如此,php為唯讀,無法寫入任何檔案到網站目錄下。也就是說使用者不能上傳檔案,即使有漏洞, 駭客也傳不了後門, 更不可能掛木馬. 這麼幹之前告知程式員將檔案快取改為nosql記憶體緩衝(例如memcached、redis等),上傳的檔案通過介面傳到其他服務 器(靜態伺服器)。備忘:程式產生本機快取是個非常糟糕的習慣,使用檔案快取速度緩慢、浪費磁碟空間、最重要一點是一般情況下伺服器無法橫向擴充 5、關閉php錯誤記錄檔 display_errors = On改為display_errors = Off 程式一旦出現錯誤,詳細錯誤資訊便立刻展示到使用者眼前,其中包含路徑、有的甚至是資料庫帳號密碼. 注入滲透密碼基本上都是通過這個報錯來猜取。生產環境上強烈關閉它 6、php上傳分離將檔案上傳到遠程伺服器,例如nfs等。當然也可以調用你們寫好的php介面. 即使有上傳漏洞,那麼檔案也被傳到了靜態伺服器上。木馬等檔案根本無法執行. 例子:php網站www.xingzuo51.com,目錄/data/site/www.xingzuo51.com靜態檔案網站static.xingzuo51.com,目錄/data/site/static.xingzuo51.com檔案直接被傳到了/data/site/static.xingzuo51.com,上傳的檔案無法通過www.xingzuo51.com來訪問,只能使用static.xingzuo51.com訪問,但是static.xingzuo51.com不支援php. 7、關閉php資訊 expose_php = On改為expose_php = Off 不輕易透露自己php版本資訊,防止駭客針對這個版本的php發動攻擊. 8、禁止動態載入連結庫 disable_dl = On;改為enable_dl = Off;9、禁用開啟遠程url allow_url_fopen = On改為allow_url_fopen = Off 其實這點算不上真正的安全,並不會導致web被入侵等問題,但是這個非常影響效能, 筆者認為它屬於狹義的安全問題. 以下方法將無法擷取遠程url內容 $data = file_get_contents("http://www.baidu.com/");擷取本地檔案內容: $data = file_get_contents("1.txt");如果網站訪問量不大、資料庫也運行良好,但是web伺服器負載出奇的高,請直接檢查下是否有這個方法。 php擷取遠程web的內容,建議使用curl。 |