1. 系统与PHP版本更新
保持系统和PHP最新是防范已知漏洞的核心措施。定期运行以下命令更新系统及PHP相关包:
sudo apt update && sudo apt upgrade -y
建议使用Ubuntu官方PPA安装PHP(如ondrej/php
),以获取更及时的安全更新。
2. PHP配置文件安全优化
通过php.ini
调整关键参数,降低安全风险:
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
disable_functions = eval,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
max_execution_time = 30 # 脚本最大执行时间(秒)
memory_limit = 128M # 单个脚本最大内存(MB)
upload_max_filesize = 2M # 上传文件大小限制(MB)
post_max_size = 8M # POST数据最大大小(MB)
open_basedir
约束PHP脚本仅能访问指定目录(如网站根目录和临时目录):open_basedir = /var/www/html:/tmp
allow_url_fopen = Off
allow_url_include = Off
expose_php
,避免向客户端泄露PHP版本信息:expose_php = Off
以上配置需根据实际环境调整,修改后重启Web服务(Apache/Nginx)生效。
3. Web服务器配置加固
mod_security
(Web应用防火墙),拦截SQL注入、XSS等攻击;配置ServerTokens
和ServerSignature
隐藏服务器信息:sudo a2enmod security2
sudo nano /etc/apache2/apache2.conf
添加以下内容:ServerTokens Prod
ServerSignature Off
<Directory /var/www/html>
Require all granted
</Directory>
fastcgi_pass
将PHP请求转发至PHP-FPM,避免直接解析PHP文件;限制访问敏感目录:location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
location ~ /(uploads|config)/ {
deny all;
}
修改后重启服务:sudo systemctl restart apache2 # Apache
sudo systemctl restart nginx # Nginx
4. HTTPS加密与防火墙设置
sudo apt install certbot python3-certbot-apache # Apache
sudo certbot --apache -d yourdomain.com
sudo apt install ufw
sudo ufw allow 'Apache Full' # 或 'Nginx Full'
sudo ufw allow ssh
sudo ufw enable
5. 会话与身份认证安全
HttpOnly
(防止XSS窃取会话ID)和Secure
(仅通过HTTPS传输会话ID):session.cookie_httponly = On
session.cookie_secure = On
session.gc_maxlifetime = 3600 # 会话有效期(秒)
password_hash()
函数存储用户密码(支持bcrypt、Argon2等算法),避免明文存储:$hashed_password = password_hash($user_password, PASSWORD_DEFAULT);
验证密码时使用password_verify()
:if (password_verify($input_password, $hashed_password)) {
// 密码正确
}
6. 文件与目录权限管理
www-data
),权限设为755
(目录)和644
(文件):sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
uploads
)设置为不可执行,防止上传的恶意脚本运行:sudo chmod -R 755 /var/www/html/uploads
sudo chown -R www-data:www-data /var/www/html/uploads
7. 日志监控与安全审计
/var/log/php_errors.log
)和Web服务器日志(/var/log/apache2/error.log
或/var/log/nginx/error.log
),识别异常请求(如大量404错误、SQL注入尝试)。phpseclib
扫描代码漏洞,或部署入侵检测系统(如Fail2ban)防范暴力破解:sudo apt install fail2ban
sudo systemctl enable fail2ban
8. 依赖库与框架安全
composer update
更新库文件,修复已知漏洞。