PHP系統的安全配置初級
PHP有很多的配置參數,可以直接訪問系統和操作目錄的。
比如system命令(該命令可以讓php直接訪問Linux系統,做一些登錄后的操作)在默認的php-fpm程序里,是默認關掉了的。
1.php-fpm的php.ini查看(默認的php目錄)
切換到/usr/local/php/etc 目錄下面,可以看到php的基本配置在該目錄下
如果沒有找到 可以用命令查找語句
find /usr/local/php -name php.ini
會將對應的位置列出來
2.關閉掉正在運行的php-fpm(主要作用是重啟php-fpm,解決一些崩潰BUG)
killall php-fpm(關閉掉所有叫php-fpm的運行進程)
如果要重新開始運行
/usr/local/php/sbin/php-fpm(超級管理員命令)
3.為了防止對面查看php版本
expose_php=on (開啟這個后,攻擊者將無法查看php的版本信息)
3.開啟后 可以直接調用system(和system類似的包括exec命令,一個輸出命令運行的結果,一個不輸出運行的結果)
system("pwd");
直接調用了Linux的pwd命令。
該命令默認情況是被禁止掉了的,在php.ini的
disable_functions = 后面可以填寫一大串的禁止使用函數,(多個禁用函數的時候,需要用逗號分割)比如
禁止掉phpinfo() 函數,這樣系統就無法查看phpinfo()的信息了。
如果要用系統的命令,需要開放system命令(該命令不安全,但是在恰當的場合使用卻能大幅度提升效率)
4.開啟了一些不安全的指令,需要用一些配置來限制其訪問目錄權限
open_basedir= .:/home/www/
open_basedir 限定當前用戶的訪問目錄 .代表當前目錄 /home/www代表允許訪問的所有目錄 超過限定目錄后,會直接報錯
5.在正式的運行環境上,需要對php.ini的一些東西進行新配置(生效的作用范圍僅僅是當前php腳本)
關閉錯誤顯示
error_reporting(E_ALL);
ini_set( 'display_errors', 'On' );
error_reporting(0);
ini_set( 'display_errors', 'Off' );
6.當開啟了safe_mode的時候 ini_set 也是沒有用的
ini_set('post_max_size','10M');
ini_set('upload_max_filesize','8M');//文件上傳最大
需要在.htaccess進行配置(要求設置是 AllowOverride All)
php_value upload_max_filesize 8M
php_value post_max_size 10M
PS:在大型項目部署中,所有環境都是統一的,一般都是開啟安全模式,這個時候是不允許單獨改變php的某個配置參數(PHP的配置是運維部確定了配置,不允許程序員擅自改動運行環境,只能通過自己內部完成)要完成該功能就需要.htaccess 進行配置