nginx 只让php入口文件访问,其他php文件禁止直接访问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 只让php入口文件访问,其他php文件禁止直接访问相关的知识,希望对你有一定的参考价值。

网站经常被植入php文件后门,现在网站根目录下有两个入口文件 分别是web/index.php
app/index.php 。黑客经常利用上传漏洞上传可执行文件,如何利用nginx 只让 web/index.php 和 app/index.php 访问呢?其他的php文件一律不能访问?

你用的系统是微擎吗?

正常来说,除了这两个php文件,和回调用的接口外,其它php都是不能直接访问的,文件头有常量判断,未定义就退出了。

所以你的系统有上传漏洞,应该检查是哪里出了问题,并去修复一下。可以从以下几点着手:

    上传权限仅提供给已登录会员,在上传接口中判断未登录状态的,直接返回错误信息

    上传文件类型限制,如果需要的是图片,严格限制图片类型,并做图片规格检测(gd库就可以处理),不符合的不保存文件

    文件名处理,不要使用客户端上传的文件名保存,而是根据规则 生成一个随机的名字保存

    上传频率限制(根据会员限制),比如,一个小时内限制上传5张,一天限制100张,可以有效防止黑客利用上传接口填充垃圾文件到你的服务器

    如果可行,对上传文件做一个临时机制,如上传的文件先放到临时文件夹,资料保存的时候,把文件处理一下,移动到正常的附件目录。这样就可以定期清理临时文件夹,防止上传后没使用的文件过多占用服务器空间。

    不过这个功能改起来会复杂一点,要处理所有使用到上传功能的接口。

以上几点处理好,被上传可执行文件的问题基本上可以杜绝了

而你的解决方案,是只治标不治本的方案

参考技术A nginx调用PHP有sock方式和端口方式

1、确认nginx已经调用了php;
2、先确认你的nginx使用什么方式调用PHP;
3、如果使用端口方式,端口对不对应,如果使用SOCK方式,那么路径对不对;

上面只是大概,你有配置文件给,基本很快看出来,没有的话,实在不好判断
参考技术B 可以在nginx配置中直接写正则,判断如果不是这两个路径就return就完事了追问

帮忙写一下好吗 重谢

追答

#匹配到访问路径
location ~* (!(web\/index\.php|app\/index\.php))
return 403;

好像就这个样子 不过你这俩个入口文件的访问权限应该不写在nginx里比较好吧

参考技术C 用rewrite正则处理一下下就好了

nginx隐藏入口文件index.php

网站的访问url可能是这样
http://www.xxx.com/index.php/home/index/index

这种有点不美观,我们想达到如下效果
http://www.xxx.com/home/index/index


修改一下nginx配置即可:

server {
  listen 80;
  server_name www.xxx.com;
  root "/var/html/wwwroot/xxx";
  index index.html index.php;
  location / {
    if (!-e $request_filename){
      rewrite ^(.*)$ /index.php?s=$1 last;
      break;
    }

  }
  # ...
}

以上是关于nginx 只让php入口文件访问,其他php文件禁止直接访问的主要内容,如果未能解决你的问题,请参考以下文章

TP3.2 Nginx下配置ThinkPhp多入口访问

Nginx下配置ThinkPhp多入口访问

nginx环境跑tp5只能访问入口文件访问不了方法

Nginx配置 隐藏入口文件index.php

PHP 网站如何修改默认访问文件的nginx配置

nginx+php-fpm 问题无法调用文件夹中的其他 php 文件