前一排服務器被放了後門 入侵者居然大白天在服務器上面打包整站程序。
這周總結了部分php安全方面的知識,就算淺薄,權當亡羊補牢也好,先記下來,以供日後參考。
php.ini 設置
1、
disable_functions = phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec ,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl, pfsockopen,openlog,syslog,rea dlink,symlink,popepassthru,stream_socket_server, get_current_user,leak,putenv,popen,opendir
這類函數能禁止就禁止
2.如果可以的話,設置“safe_mode”為“on”
3.禁止“open_basedir” 可以禁止指定目錄之外的文件操作
4.expose_php設為off 這樣php不會在http文件頭中洩露信息
5.設置“allow_url_fopen”為“off” 可禁止遠程文件功能
6.“log_errors”設為“on” 錯誤日志開啟
php編碼方面 要注意的問題如下:
1.要有“用戶提交的信息皆危險”的意識 所有用戶提交的信息 不管是表單傳的 post get 或是其他形式提交的數據 都要單獨寫個過濾函數處理一遍,養成習慣,用戶提交的 都用這個函數過一遍,主要是過濾特殊字符,strip_tags很有效, 如果沒有get_magic_quotes_gpc 要用這個函數mysql_real_escape_string再過濾一遍,確保安全,當然有特殊要求的,大可自己再弄嚴格點的過濾過程。這一步做好了,可大大減少代碼出現漏洞的機會。
2.檢查程序邏輯的漏洞,不要犯低級的邏輯錯誤。
3.如果懷疑程序被放了後門 大可先檢查有沒有一句話木馬 eval($_POST[ 全站搜索php代碼有沒有這樣的源代碼,有的話,幾乎可以斷定會出問題!
4.平時php文件要命名規范 至少讓自己可以一目了然,哪些php文件名字有問題
5.如用開源代碼,有補丁出來的話,盡快打上補丁。
6.如果攻擊者拿到了服務器的最高權限,有可能通過修改服務器的配置文件php.ini來達到他們隱藏後門的目的,前幾年比較流行。原理如下:
php.ini 裡面的這兩個配置項:auto_prepend_file ,auto_append_file 可以讓php解析前,自己加點東西進去 Automatically add files before or after any PHP document
如果被配置了eval()函數的後門 那就很陰險了,php文件代碼裡面查不出,只會在php解析前包含eval()函數進來 並且因為是全局的 所以所有php頁面都是後門!
所以要先確認auto_prepend_file ,auto_append_file沒被配置成其他東西,才進行第3點的源代碼檢查。
7.兩個查後門的實用linux命令:
#找出/data/web/website/目錄下 35分鐘前新建的php find /data/web/website/ -iname *.php -mtime -35 #找出/data/web/website/ 裡面源碼包含eval($_POST[的php文件 find /data/web/website/ -name "*.php" | xargs grep "eval($_POST["