1. 更新系统与PHP版本
保持系统和PHP为最新版本是安全基础,可及时修复已知漏洞。执行以下命令更新系统及PHP:
sudo apt update && sudo apt upgrade -y
sudo apt install php php-cli php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip -y
2. 配置PHP核心安全参数(php.ini)
通过php --ini命令定位php.ini文件(路径通常为/etc/php/{version}/cli/php.ini或/etc/php/{version}/fpm/php.ini),修改以下关键参数:
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
disable_functions = eval,exec,passthru,shell_exec,system,curl_exec,parse_ini_file,show_source
upload_max_filesize = 2M
post_max_size = 8M
file_uploads = On
open_basedir限定PHP脚本可访问的目录范围:open_basedir = /var/www/html/:/tmp/
session.cookie_secure = On # 仅通过HTTPS传输会话Cookie
session.cookie_httponly = On # 禁止JavaScript访问会话Cookie
session.cookie_samesite = Strict # 限制会话Cookie仅在同站请求中发送
session.gc_maxlifetime = 1440 # 会话有效期(分钟)
3. 强化Web服务器配置
/etc/apache2/conf-enabled/security.conf,添加:ServerTokens Prod
ServerSignature Off
启用mod_security(Web应用防火墙)和mod_evasive(防暴力破解):sudo a2enmod security2 evasive2
sudo systemctl restart apache2
/etc/nginx/sites-available/default中添加:location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php{version}-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
4. 使用HTTPS加密传输
通过Let’s Encrypt获取免费SSL证书,启用HTTPS:
sudo apt install certbot python3-certbot-apache -y # Apache
sudo certbot --apache -d yourdomain.com
# 或Nginx
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com
5. 设置文件与目录权限
确保Web目录及文件权限合理,避免未授权访问:
sudo chown -R www-data:www-data /var/www/html # 将所有权赋予Web服务器用户
sudo chmod -R 755 /var/www/html # 目录权限设为755(所有者可读/写/执行,其他用户可读/执行)
sudo find /var/www/html -type f -exec chmod 644 {} \; # 文件权限设为644(所有者可读/写,其他用户可读)
6. 启用OPcache提升性能与安全性
OPcache可缓存编译后的PHP脚本,减少服务器负载,同时降低源代码泄露风险。在php.ini中启用:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
7. 定期维护与监控
rsync或mysqldump):sudo rsync -avz /var/www/html /path/to/backup
mysqldump -u username -p database_name > database_backup.sql
PHPSA)扫描代码漏洞,监控访问日志与错误日志(/var/log/apache2/access.log、/var/log/php_errors.log),及时发现异常行为。