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攻击。