在 Ubuntu 上运行 PHP 应用时,防止黑客攻击需要从系统、Web 服务、PHP 配置、代码、运维多个层面来做。下面给你一套实用、可落地的防护清单。
sudo apt update
sudo apt upgrade -y
定期更新 Ubuntu 和 PHP,修复安全漏洞。
sudo nano /etc/ssh/sshd_config
# PermitRootLogin no
sudo systemctl restart ssh
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Nginx
autoindex off;
Apache
Options -Indexes
Nginx 示例
location ~ /\.(git|env|htaccess) {
deny all;
}
location /uploads/ {
location ~ \.php$ {
deny all;
}
}
编辑:
sudo nano /etc/php/8.x/fpm/php.ini
expose_php = Off
display_errors = Off
log_errors = On
allow_url_include = Off
allow_url_fopen = On # 如不需要可 Off
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
open_basedir = /var/www/html:/tmp
然后重启 PHP:
sudo systemctl restart php8.x-fpm
✅ 使用 PDO / 预处理
$stmt = $pdo->prepare("SELECT * FROM user WHERE id = ?");
$stmt->execute([$id]);
❌ 禁止字符串拼接 SQL
echo htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
<input type="hidden" name="csrf" value="<?= $_SESSION['csrf'] ?>">
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
⚠ 配置文件不要 777
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'";
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/php8.x-fpm.log
sudo apt install fail2ban
| 攻击类型 | 防护方式 |
|---|---|
| SQL 注入 | 预处理 |
| XSS | htmlspecialchars |
| 文件上传 | 限制+重命名 |
| 目录遍历 | open_basedir |
| 暴力破解 | fail2ban |
| 0day | 及时更新 |
如果你愿意,我可以:
你现在是用的 Nginx 还是 Apache?PHP 版本是多少?