一、系统基础安全加固
sudo apt update && sudo apt upgrade(Ubuntu/Debian)或对应发行版的包管理命令,更新Linux内核、PHP及其依赖库(如MySQL、Nginx/Apache),及时修复已知安全漏洞。www-data、Nginx的nginx)应设为普通用户,禁止使用root运行;数据库用户仅授予必要权限(如SELECT、INSERT),避免过度授权。二、PHP配置文件安全优化
php -m查看已加载模块,移除未使用的模块(如mysqli若无需MySQL);在php.ini中设置disable_functions = system,exec,passthru,shell_exec禁用高危函数,防止命令注入;关闭allow_url_fopen和allow_url_include,杜绝远程文件包含攻击。expose_php = Off,避免HTTP头部泄露PHP版本;配置open_basedir = /var/www/html:/tmp,将PHP脚本访问限制在指定目录,防止跨目录遍历;开启log_errors = On并将错误日志记录到/var/log/php_errors.log,关闭display_errors防止敏感信息泄露。session.cookie_httponly = 1和session.cookie_secure = 1(HTTPS环境下),防止会话ID被JavaScript窃取;使用session_regenerate_id(true)在用户登录时重新生成会话ID,防范会话固定攻击;限制脚本执行时间(max_execution_time = 30)、内存使用(memory_limit = 128M),避免资源耗尽攻击。三、Web服务器安全配置
fastcgi_pass指向PHP-FPM的Unix套接字(如unix:/var/run/php/php8.2-fpm.sock),而非TCP端口;在虚拟主机配置中添加location ~ \.php$块,限制仅处理.php文件;通过limit_req_zone设置请求频率限制(如limit_req_zone $binary_remote_addr zone=req_per_ip:10m rate=10r/s;),防范暴力破解。AllowOverride All,避免.htaccess文件被滥用;使用php_admin_value open_basedir在虚拟主机中单独设置目录限制;关闭目录列表(Options -Indexes),防止敏感文件被枚举。/var/www/html/uploads)、静态文件目录,添加location ~* \.(php|php5)$ { deny all; }(Nginx)或<Directory "/var/www/html/uploads"> php_admin_flag engine off</Directory>(Apache),禁止PHP执行。四、文件与目录权限管理
/var/www/html)设置为755,文件设置为644;上传目录设置为755且禁止执行权限(chmod -R 755 uploads);避免将文件所有者设为Web用户(如chown -R root:www-data /var/www/html),防止Web进程越权修改文件。五、数据库安全防护
mysql_secure_installation,设置强root密码并移除匿名用户、测试数据库;修改bind-address = 127.0.0.1,仅允许本地连接;创建专用数据库用户,限制其仅能访问特定数据库(如GRANT SELECT, INSERT ON mydb.* TO 'appuser'@'localhost';)。$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$id]);)绑定参数,避免直接拼接SQL语句。六、持续监控与维护
/var/log/nginx/access.log/error.log)、PHP(/var/log/php_errors.log)、MySQL(/var/log/mysql/error.log)日志,使用fail2ban等工具监控异常登录(如频繁的SSH尝试)或恶意请求(如大量404错误)。lynis、OpenVAS等工具定期扫描系统漏洞;定期备份网站文件与数据库(如使用rsync或mysqldump),并将备份存储在异地。listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;),强制跳转HTTP到HTTPS,加密数据传输。