php disable classes,PHP安全配置基础教程(3)
解決方法:
要求程序員對所有用戶提交的要放到SQL語句的變量進行過濾。
即使是數字類型的字段,變量也要用單引號擴起來,MySQL自己會把字串處理成數字。
在MySQL里不要給PHP程序高級別權限的用戶,只允許對自己的庫進行操作,這也避免了程序出現問題被 select INTO OUTFILE … 這種攻擊。
8、警告及錯誤信息
PHP默認顯示所有的警告及錯誤信息:
error_reporting = E_ALL & ~E_NOTICE
display_errors = On
在平時開發調試時這非常有用,可以根據警告信息馬上找到程序錯誤所在。
正式應用時,警告及錯誤信息讓用戶不知所措,而且給攻擊者泄漏了腳本所在的物理路徑,為攻擊者的進一步攻擊提供了有利的信息。而且由于自己沒有訪問到錯誤的地方,反而不能及時修改程序的錯誤。所以把PHP的所有警告及錯誤信息記錄到一個日志文件是非常明智的,即不給攻擊者泄漏物理路徑,又能讓自己知道程序錯誤所在。
修改php.ini中關于Error handling and logging部分內容:
error_reporting = E_ALL
display_errors = Off
log_errors = On
error_log = /usr/local/apache/logs/php_error.log
然后重啟apache,注意文件/usr/local/apache/logs/php_error.log必需可以讓nobody用戶可寫。
9、disable_functions
如果覺得有些函數還有威脅,可以設置php.ini里的disable_functions(這個選項不能在httpd.conf里設置),比如:
disable_functions = phpinfo, get_cfg_var
可以指定多個函數,用逗號分開。重啟apache后,phpinfo, get_cfg_var函數都被禁止了。建議關閉函數phpinfo, get_cfg_var,這兩個函數容易泄漏服務器信息,而且沒有實際用處。
10、disable_classes
這個選項是從PHP-4.3.2開始才有的,它可以禁用某些類,如果有多個用逗號分隔類名。disable_classes也不能在httpd.conf里設置,只能在php.ini配置文件里修改。
11、open_basedir
前面分析例程的時候也多次提到用open_basedir對腳本操作路徑進行限制,這里再介紹一下它的特性。用open_basedir指定的限制實際上是前綴,不是目錄名。也就是說 “open_basedir = /dir/incl” 也會允許訪問 “/dir/include” 和 “/dir/incls”,如果它們存在的話。如果要將訪問限制在僅為指定的目錄,用斜線結束路徑名。例如:”open_basedir = /dir/incl/”。
可以設置多個目錄,在Windows中,用分號分隔目錄。在任何其它系統中用冒號分隔目錄。作為Apache模塊時,父目錄中的open_basedir路徑自動被繼承。
四、其它安全配置
1、取消其它用戶對常用、重要系統命令的讀寫執行權限
一般管理員維護只需一個普通用戶和管理用戶,除了這兩個用戶,給其它用戶能夠執行和訪問的東西應該越少越好,所以取消其它用戶對常用、重要系統命令的讀寫執行權限能在程序或者服務出現漏洞的時候給攻擊者帶來很大的迷惑。記住一定要連讀的權限也去掉,否則在linux下可以用/lib/ld- linux.so.2 /bin/ls這種方式來執行。
如果要取消某程如果是在chroot環境里,這個工作比較容易實現,否則,這項工作還是有些挑戰的。因為取消一些程序的執行權限會導致一些服務運行不正常。PHP的mail函數需要/bin/sh去調用sendmail發信,所以/bin/bash的執行權限不能去掉。這是一項比較累人的工作,
2、去掉apache日志其它用戶的讀權限
apache的access-log給一些出現本地包含漏洞的程序提供了方便之門。通過提交包含PHP代碼的URL,可以使access-log包含PHP代碼,那么把包含文件指向access-log就可以執行那些PHP代碼,從而獲得本地訪問權限。
如果有其它虛擬主機,也應該相應去掉該日志文件其它用戶的讀權限。
當然,如果你按照前面介紹的配置PHP那么一般已經是無法讀取日志文件了。
總結
以上是生活随笔為你收集整理的php disable classes,PHP安全配置基础教程(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 分布键,DWS使用技巧:根
- 下一篇: php是实现点击改变状态,PHP利用he