Linux中ThinkPHP安全设置怎么做
导读:Linux下 ThinkPHP 安全设置清单 一 基础部署与运行环境 将 Web 根目录指向 public,不要把应用根目录暴露到 Web;使用 Nginx + PHP-FPM 的标准架构,Nginx 配置示例:root 指向 /var/...
Linux下 ThinkPHP 安全设置清单
一 基础部署与运行环境
- 将 Web 根目录指向 public,不要把应用根目录暴露到 Web;使用 Nginx + PHP-FPM 的标准架构,Nginx 配置示例:root 指向 /var/www/your_project/public,PHP 通过 fastcgi_pass unix:/run/php/php7.4-fpm.sock 转发;URL 重写规则确保隐藏 index.php。生产环境务必关闭调试:设置 APP_DEBUG=false(优先通过环境变量或 .env 管理),并配置站点使用 HTTPS(如 Let’s Encrypt)。这些基础措施能显著降低信息泄露与误配置风险。
二 目录与文件权限
- 坚持最小权限与禁止 777:推荐权限为目录 755、文件 644;严禁将 runtime、上传等目录设为 777。关键目录建议如下(示例命令可按需调整):
- runtime(缓存/日志/会话):chmod -R 755 runtime;必要时仅赋予 Web 服务用户对 runtime 的写权限
- public 入口与静态资源:入口 644;static 等 755
- 上传目录(如 public/storage):755,并确保不可执行
- 应用代码与配置:app、config 等源码 644
- 快速修复示例:
- find runtime -type d -exec chmod 755 { } ; & & find runtime -type f -exec chmod 644 { } ;
- chmod 755 public/storage
- 目录安全文件与访问限制:无法将框架目录移出 Web 时,可在入口定义 BUILD_DIR_SECURE=true,自动写入安全文件(如 index.html 或自定义内容)以阻断目录浏览;Apache 可在模板目录放置 .htaccess 禁止直接访问模板文件(Nginx 侧用 deny all 实现同等效果)。
三 框架与应用层安全
- 关闭错误报告与调试:生产环境关闭 PHP 错误显示(display_errors=Off),并关闭 APP_DEBUG;避免堆栈与路径泄露。
- 输入校验与过滤:统一通过 Request 对象获取参数(如 param/only),配合验证器进行白名单校验与类型强制(如 param(‘id/d’));必要时设置全局 default_filter(如 htmlspecialchars/strip_tags)。模型写入使用 allowField 限制可写字段,避免“意外字段注入”。
- 防 SQL 注入:优先使用 PDO 预处理/参数绑定;避免拼接 SQL;对 whereRaw/whereExp 等手写片段同样进行参数绑定。
- 防 XSS:输出阶段进行 HTML 转义;在 ThinkPHP 5.1 中默认已对输出转义,低版本可按需配置或自定义过滤。
- 表单与 CSRF:启用表单令牌(如 TOKEN_ON=true),在表单中使用 { TOKEN} 或在控制器用 autoCheckToken 校验,防止重复提交与跨站伪造。
- 文件上传:使用框架 think\File 进行后缀、MIME、大小与图片合法性校验;上传目录与可执行权限隔离,必要时对上传文件做病毒扫描与重命名存储。
四 服务器与网络防护
- 传输加密:全站启用 HTTPS,配置 HSTS,强制跳转 80→443,保护凭据与会话。
- 访问控制与速率限制:使用 firewalld/iptables 限制管理口与数据库端口访问;对登录、注册、API 等接口启用 限流/限速(如 Nginx limit_req/limit_conn 或 WAF 策略),缓解暴力与滥用。
- 安全基线:及时更新 ThinkPHP 与依赖组件,关注官方安全通告;定期审计代码与依赖、检查错误日志与异常访问;避免使用危险函数(如 eval)与暴露敏感信息。
五 快速检查清单
| 检查项 | 期望配置/做法 |
|---|---|
| Web 根目录 | 仅指向 public,入口为 index.php |
| 调试模式 | APP_DEBUG=false(通过 .env/环境变量) |
| 错误显示 | PHP display_errors=Off |
| HTTPS | 已部署证书,强制 443 |
| 目录权限 | 目录 755、文件 644;runtime 可写但非 777 |
| 目录安全 | 生成安全文件或配置 deny all |
| 令牌与验证 | 启用 CSRF 令牌;表单/接口使用验证器与 allowField |
| SQL 安全 | 全程使用 参数绑定,禁止拼接 |
| 上传安全 | 后缀/MIME/大小/图片校验;目录不可执行 |
| 防火墙与限流 | 仅开放必要端口;关键接口限速限流 |
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux中ThinkPHP安全设置怎么做
本文地址: https://pptw.com/jishu/789300.html
