Linux服务器上Laravel安全设置指南
mod_rewrite(支持URL重写,确保路由正常)和mod_headers(用于设置安全响应头)模块,执行sudo a2enmod rewrite headers后重启服务(sudo systemctl restart apache2);配置虚拟主机时,设置AllowOverride All以允许.htaccess文件生效,并限制目录访问权限。X-Frame-Options "SAMEORIGIN"防点击劫持、X-XSS-Protection "1; mode=block"启用水印防XSS、X-Content-Type-Options "nosniff"防MIME类型嗅探);通过try_files $uri $uri/ /index.php?$query_string将请求转发至Laravel的index.php,并限制对隐藏文件(如.env)的访问(location ~ /\.(?!well-known).* { deny all; })。display_errors = Off)以避免泄露敏感信息,保留error_reporting = E_ALL用于日志记录;禁用危险函数(如exec、system,通过disable_functions参数),限制文件上传大小(upload_max_filesize和post_max_size设置为合理值,如10M)。www-data),执行sudo chown -R www-data:www-data /var/www/laravel;设置目录权限为755(sudo find /var/www/laravel -type d -exec chmod 755 {} \;)、文件权限为644(sudo find /var/www/laravel -type f -exec chmod 644 {} \;);特别地,storage(日志、缓存)和bootstrap/cache(框架缓存)目录需设置为775(sudo chmod -R 775 /var/www/laravel/storage /var/www/laravel/bootstrap/cache),确保Web服务器可写入。APP_URL为正式域名(避免使用localhost),并通过php artisan key:generate生成唯一的APP_KEY(用于加密会话、密码重置令牌等);运行php artisan config:cache缓存配置,防止.env文件被直接读取。@csrf指令),需确保所有修改数据的表单均包含该令牌;使用Blade模板的自动转义功能({{ }})防止XSS攻击,若需输出原始HTML,使用{!! !!}并自行过滤内容;通过php artisan make:auth快速实现身份验证系统,支持密码哈希(bcrypt)、记住我功能及密码重置。Validator门面或表单请求类)对用户输入进行规则约束(如required|string|max:255),并结合filter_var函数过滤特殊字符;避免直接使用原生SQL查询,优先使用查询构建器或Eloquent ORM(自动防止SQL注入)。sudo apt install certbot python3-certbot-nginx,然后执行sudo certbot --nginx -d yourdomain.com),自动配置Nginx/Apache强制HTTPS跳转;确保证书有效期(90天)监控,可通过Certbot的自动续期功能(sudo certbot renew --dry-run测试)。firewalld限制服务器访问,仅开放HTTP(80端口)、HTTPS(443端口)及SSH(22端口),执行sudo firewall-cmd --permanent --zone=public --add-service={http,https,ssh},然后sudo firewall-cmd --reload;若使用ufw,可执行sudo ufw allow 'Nginx Full'并sudo ufw enable。composer update laravel/framework)、依赖包(composer update)及操作系统(sudo apt update && sudo apt upgrade)为最新版本,及时修复已知安全漏洞;关注Laravel官方安全公告(如GitHub Releases),针对高危漏洞立即升级。storage/logs/laravel.log)和Web服务器日志(/var/log/nginx/access.log//var/log/apache2/access.log),关注频繁的404错误(可能为扫描行为)、500错误(可能为攻击尝试)及异常POST请求(可能为暴力破解);设置日志轮转(logrotate),避免日志文件过大。config/session.php中,设置secure为true(仅通过HTTPS传输cookie)、http_only为true(防止JavaScript访问cookie)、same_site为strict(防止CSRF攻击);调整lifetime(会话过期时间,如120分钟)和expire_on_close(浏览器关闭时过期)。throttle限制接口请求频率(如Route::middleware(['throttle:60,1'])->group(function () { ... });表示每分钟最多60次请求),防止暴力破解密码或DDoS攻击。