在 CentOS 系统上运行 Laravel 应用,安全防护是必须重视的环节。下面这 13 条经过实际运维反复验证的经验,涵盖了从系统层到应用层的关键要点——按照执行,能够抵御绝大多数常见攻击。
紧盯更新:操作系统、Laravel 框架、PHP、Nginx 或 Apache……任何一个组件出现已知漏洞,都可能成为攻击突破口。定期执行
yum update和composer update,千万别偷懒。这项任务看起来琐碎,但能堵住大量已公开的 CVE 漏洞。密码策略要严格:数据库、FTP、SSH 的密码必须足够复杂,字母、数字、特殊符号混合使用,长度至少 16 位。而且不要指望一次设置就一劳永逸,定期轮换密码是良好的安全习惯。
权限最小化原则:Web 服务器进程(通常是
apache或nginx用户)只赋予 Laravel 项目目录的最小读写权限,写权限仅开放给storage和bootstrap/cache这类真正需要写入的目录。绝对不要用root运行 Web 服务,那是在给自己制造风险。防火墙严格管控:使用
firewalld或iptables管理端口——只开放 HTTP(80)、HTTPS(443)和 SSH(22),其余端口全部拦截。如果能将 SSH 端口改为高位端口,还能有效阻挡大量自动化扫描。禁用目录列表浏览:Web 服务器默认可能允许用户直接浏览目录下的文件列表,这会给攻击者提供侦察便利。在 Nginx 或 Apache 的配置中显式禁用
autoindex或Options +Indexes。安全响应头不能缺:配置 HTTP 安全响应头——Content Security Policy (CSP)、X-Content-Type-Options、X-Frame-Options、Strict-Transport-Security……这些头部能有效防止内容嗅探、点击劫持等攻击。在 Laravel 的中间件配置中即可添加。
SQL 注入防范靠查询构造器:Laravel 自带的查询构造器和 Eloquent ORM 默认使用参数绑定,能有效防止 SQL 注入。如果团队中有人习惯编写原生 SQL,务必强调只使用预处理语句。
XSS 攻击需彻底转义:所有用户输入(表单、URL 参数、上传文件名)在输出到 HTML 前,必须经过转义处理。Laravel 的 Blade 模板引擎默认会转义,但使用
{!! !!}输出原始内容时要格外谨慎,确保内容已充分过滤。CSRF 保护必须保持启用:Laravel 内置了 CSRF 令牌验证,默认全局启用。不要为了方便而关闭它——除非你完全清楚自己在做什么,并且已有其他替代方案(例如 API 无状态验证)。
文件上传设定严格规则:限制上传文件的类型(仅允许图片、PDF 等必要格式)、大小(根据业务需求设定上限),并对上传文件进行安全扫描。存储路径不要放在 Web 可访问的根目录下,更不要直接使用用户提供的文件名进行保存。
HTTPS 是安全底线:未加密的 HTTP 就像在大街上公开喊口令。使用 Let's Encrypt 免费证书或商业证书为网站启用 HTTPS,强制所有流量走 443 端口,并额外添加 HSTS 头部。
日志监控异常行为:定期检查
/var/log下的系统日志、Web 服务器访问日志,以及 Laravel 的storage/logs中的应用日志。重点关注 404/403 频繁的 IP、大量失败的登录尝试、异常的请求模式。配合自动化告警能大幅提升效率。备份是最后的救命稻草:定期将 Laravel 项目代码、数据库、上传文件备份到异地存储。一旦遭遇勒索攻击或数据损坏,至少能快速恢复。备份策略要有版本管理,保留最近几天的快照。
把这 13 条都做到位,CentOS 平台上 Laravel 应用的安全防护就能提升一个档次。当然,安全是持续的过程——新漏洞会不断出现,保持学习与定期复盘才是长久之计。
