如何设置ThinkPHP静态资源访问与目录权限安全防护措施?
- 内容介绍
- 文章标签
- 相关推荐
本文共计866个文字,预计阅读时间需要4分钟。
在ThinkPHP项目中,目录`public`是唯一允许Web直接访问的入口。其他目录(如`app`、`config`、`runtime`、`vendor`等)绝对不能被HTTP请求读取。一旦暴露,可能导致配置泄露、源码下载、`.env文件被获取等高风险问题。
nginx 中禁止敏感目录被 Web 访问
最直接有效的控制方式是在 Nginx 配置里用 location 显式拒绝请求。这是生产环境必须加的防护层,仅靠目录权限不够。
-
location ~ ^/(app|config|database|extend|runtime|vendor)/是标准写法,匹配以这些路径开头的任何 URL - 必须放在
server块内,且优先级高于通用 PHP 处理规则(建议放在location ~ \.php$之前) - 搭配
deny all;后,Nginx 会直接返回 403,不交由 PHP 处理 - 注意:不要漏掉
database(有些项目把数据库迁移文件放这里)和extend(第三方扩展若含配置也可能敏感)
Apache 的 .htaccess 对应防护
如果用 Apache,public/.htaccess 本身只管 public 下的重写,真正防目录遍历得靠上层配置或额外规则。
本文共计866个文字,预计阅读时间需要4分钟。
在ThinkPHP项目中,目录`public`是唯一允许Web直接访问的入口。其他目录(如`app`、`config`、`runtime`、`vendor`等)绝对不能被HTTP请求读取。一旦暴露,可能导致配置泄露、源码下载、`.env文件被获取等高风险问题。
nginx 中禁止敏感目录被 Web 访问
最直接有效的控制方式是在 Nginx 配置里用 location 显式拒绝请求。这是生产环境必须加的防护层,仅靠目录权限不够。
-
location ~ ^/(app|config|database|extend|runtime|vendor)/是标准写法,匹配以这些路径开头的任何 URL - 必须放在
server块内,且优先级高于通用 PHP 处理规则(建议放在location ~ \.php$之前) - 搭配
deny all;后,Nginx 会直接返回 403,不交由 PHP 处理 - 注意:不要漏掉
database(有些项目把数据库迁移文件放这里)和extend(第三方扩展若含配置也可能敏感)
Apache 的 .htaccess 对应防护
如果用 Apache,public/.htaccess 本身只管 public 下的重写,真正防目录遍历得靠上层配置或额外规则。

