PHP在Linux上的安全配置指南
php.ini中设置expose_php = Off,防止HTTP头部泄露PHP版本信息(攻击者可利用版本针对性攻击)。display_errors = Off,避免将详细错误信息(如数据库结构、路径)暴露给用户;同时开启log_errors = On,将错误记录到安全位置(如/var/log/php_errors.log),便于后续排查。disable_functions参数禁用可能被滥用的函数,如eval(代码执行)、system(系统命令)、exec(执行外部程序)、shell_exec(shell命令)、passthru(直接输出原始结果)、curl_exec(远程请求)、popen(管道打开文件)等。例如:disable_functions = eval,system,exec,shell_exec,passthru,curl_exec。php -m命令查看已加载模块,移除不必要的模块(如sqlite3、gd(若无需图片处理)),减少攻击面。upload_max_filesize(单个文件最大大小,如2M)、post_max_size(POST数据最大大小,需大于upload_max_filesize,如8M)、max_file_uploads(单次请求最多上传文件数,如5),防止大文件上传导致拒绝服务(DoS)攻击。mime_content_type函数)、扩展名(如仅允许.jpg、.png),并将上传目录设置为不可执行(如chmod 755 /var/www/html/uploads,且移除php执行权限)。/etc/apache2/sites-available/000-default.conf)中,通过<FilesMatch \.php$>块将PHP请求交给PHP-FPM处理,例如:SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost"(需与PHP-FPM的listen参数一致)。/etc/nginx/sites-available/default)中,添加PHP处理块:location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; }(同样需匹配PHP-FPM的listen)。.开头的隐藏文件(如.htaccess、.env),例如Nginx中:location ~ /\. { deny all; };Apache中:<FilesMatch "^\."> Deny from all </FilesMatch>。/var/www/html/uploads)无法执行PHP脚本,例如Nginx中:location ~* ^/uploads/.*\.php$ { deny all; }。www-data、nginx)运行,避免以root身份运行(若意外执行恶意代码,可能导致系统沦陷)。可通过ps aux | grep apache或ps aux | grep nginx检查运行用户。644(所有者可读写,组和其他用户只读),目录权限设为755(所有者可读写执行,组和其他用户可读执行)。例如:sudo chmod -R 644 /var/www/html/*.php、sudo chmod -R 755 /var/www/html;所有权设为Web用户,例如:sudo chown -R www-data:www-data /var/www/html。open_basedir:在php.ini中设置open_basedir,限制PHP脚本只能访问指定目录(如/var/www/html),防止脚本遍历到系统敏感目录(如/etc、/root)。例如:open_basedir = /var/www/html:/tmp(多个目录用冒号分隔)。php.ini中开启session.cookie_httponly = On(防止JavaScript通过document.cookie窃取会话ID)、session.cookie_secure = On(仅通过HTTPS传输会话cookie,避免中间人攻击)。session.gc_maxlifetime = 1440(会话有效期,单位秒,默认1440秒=24分钟),并在应用中调用session_regenerate_id(true)(如用户登录后),重新生成会话ID,防止会话固定攻击。listen 443 ssl;、Apache的SSLEngine on)启用SSL/TLS,确保数据传输加密;同时在应用中检查$_SERVER['HTTPS'],强制跳转HTTPS(如if ($_SERVER['HTTPS'] !== 'on') { header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); exit; })。sudo apt update && sudo apt upgrade php*),修复已知安全漏洞。grep -r "eval(" /var/www/html查找危险函数),监控系统日志(如/var/log/syslog、/var/log/php_errors.log),及时发现异常行为(如大量404请求、可疑的文件上传)。ufw(Ubuntu)或firewalld(CentOS)限制访问,仅允许必要端口(如80、443):例如sudo ufw allow 80/tcp、sudo ufw allow 443/tcp、sudo ufw enable。mod_security for Apache),过滤恶意请求(如SQL注入、XSS攻击)。例如CentOS中:sudo yum install mod_security、sudo systemctl enable mod_security、sudo systemctl start mod_security。