保护 Debian 上的 Laravel 应用,需要从 系统层、Web 服务层、Laravel 应用层、数据库、运维与监控 多个层面一起做。下面给你一套比较完整、实战向的安全加固方案。
sudo apt update && sudo apt upgrade -y
adduser deploy
usermod -aG www-data deploy
# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
使用 SSH Key 登录,禁用密码登录。
apt install ufw
ufw allow 22
ufw allow 80
ufw allow 443
ufw enable
apt install fail2ban
server {
listen 443 ssl;
server_name example.com;
root /var/www/laravel/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
# 禁止访问敏感文件
location ~ /\. {
deny all;
}
location ~ ^/(\.env|composer\.json|artisan) {
deny all;
}
}
; /etc/php/8.2/fpm/php.ini
expose_php = Off
disable_functions = exec,passthru,shell_exec,system,proc_open
.env 文件必须禁止访问 ✅确保:
chmod 600 .env
并且 Nginx 已禁止访问 .env
php artisan key:generate
不要提交 .env 到 Git。
APP_ENV=production
APP_DEBUG=false
apt install certbot python3-certbot-nginx
certbot --nginx
Laravel 已默认防护,但注意:
@csrf
{{ $value }}
// ❌
DB::raw("SELECT * FROM users WHERE id = $id");
// ✅
DB::table('users')->where('id', $id)->get();
$this->authorize('view', $post);
Route::middleware(['auth', 'can:admin'])->group(function () {});
DROP USER 'root'@'%';
CREATE USER 'laravel'@'localhost' IDENTIFIED BY '强密码';
GRANT SELECT,INSERT,UPDATE,DELETE ON laravel.* TO 'laravel'@'localhost';
DB_USERNAME=laravel
DB_PASSWORD=***
sudo chown -R www-data:www-data /var/www/laravel
sudo chmod -R 755 /var/www/laravel
sudo chmod -R 775 storage bootstrap/cache
禁止目录 777
\Illuminate\Routing\Middleware\SubstituteBindings::class
或使用中间件:
if (!request()->secure()) {
return redirect()->secure(request()->getRequestUri());
}
composer require beakerboy/blade-security-header
或手动 Nginx:
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
mysqldump -u laravel -p laravel > backup.sql
tail -f storage/logs/laravel.log
composer require owen-it/laravel-auditing
| 错误 | 正确做法 |
|---|---|
.env 可访问 |
Nginx 禁止 |
APP_DEBUG=true |
生产必须 false |
| 777 权限 | 使用 www-data |
| 使用 root 运行 | 普通用户 |
| 明文密码 | bcrypt / Hash |
✅ Debian 更新
✅ SSH Key 登录
✅ HTTPS
✅ .env 不可访问
✅ 关闭 debug
✅ 非 root 运行
✅ 数据库最小权限
✅ CSRF / XSS 防护
✅ 日志监控
如果你愿意,我可以根据你的 具体环境(Nginx / Apache、PHP 版本、Laravel 版本、是否公网)给你一份 定制化安全配置方案。