从nginx层阻断可执行的php,防止php网站被挂马

背景

最近网站又被挂马了,因为使用宝塔,且网站多,所以没法确定是哪个网站的漏洞。但可以确定的是对方上传了可执行的php文件。

方法

防止执行除入口文件(index.php)以外的其他php文件。

步骤

1、修改宝塔php配置文件

我用的是php5.6和php7.4,且大部分网站都有一个统一的入口index.php

先备份 /www/server/nginx/conf/enable-php-56.conf 为/www/server/nginx/conf/enable-php-56-origin.conf

再修改 /www/server/nginx/conf/enable-php-56.conf

	location ~ [^/]\.php(/|$)
	{
		try_files $uri =404;
		fastcgi_pass  unix:/tmp/php-cgi-56.sock;
		fastcgi_index index.php;
		include fastcgi.conf;
		include pathinfo.conf;
	}

将上面的改为

	## 只允许访问index.php
	location = /index.php
	{
		try_files $uri =404;
		fastcgi_pass  unix:/tmp/php-cgi-56.sock;
		fastcgi_index index.php;
		include fastcgi.conf;
		include pathinfo.conf;
	}
	## 其他php都返回404
    location ~ .*\.(php)$
    {
        return 404;
    }

2、确认伪静态配置文件

因为大部分网站是thinkphp的

location / {
	if (!-e $request_filename){
		rewrite  ^(.*)$  /index.php?s=$1  last;   break;
	}
}

验证

1、在站点的入口处建一个,tt.php

<?php

echo 'test';

访问  xxx.com/tt.php 则返回404

2、在入口处新建 test目录,并在test目录中建立index.php

<?php

echo 'test/index.php';

访问  xxx.com/test/index.php 则返回404

3、而网站的其他链接则都能正常访问。

多入口网站

有些网站不止一个入口。比如fastadmin,会有 adminxxx.php的后台入口文件,这些站点需要单独配置,站点-->设置-->配置文件,找到 PHP-INFO-START ,先将通用的配置注释掉 

## include enable-php-74.conf; 接着在下面加上特有的配置

注意:特有配置。先将其他目录下面的adminxxx.php,给禁用掉,不然木马被上传其他目录,后命名为adminxxx.php也是会被匹配到的

	#PHP-INFO-START  PHP引用配置,可以注释或修改
    # 先注释掉通用的配置,其他特有配置最好都带上 root地址
    # include enable-php-74.conf;

    ## index.php还是得精准匹配
	location = /index.php
	{
        root /www/wwwroot/xxxx.com/public;
		try_files $uri =404;
		fastcgi_pass  unix:/tmp/php-cgi-74.sock;
		fastcgi_index index.php;
		include fastcgi.conf;
		include pathinfo.conf;
	}
    ## 先将其他目录下面的adminxxx.php,给禁用掉
    location ~ /(.*)/adminxxx.php(/|$)
    {
        return 404;
    }
    ## 通过上面过滤后,就可以执行adminxxx.php
	location ~ adminxxx.php(/|$)
	{   
        ## root 暂时不建议加了,因为容易误导自己,实际public下面其他目录的也是会被执行,主要靠上面的过滤
		try_files $uri =404;
		fastcgi_pass  unix:/tmp/php-cgi-74.sock;
		fastcgi_index index.php;
		include fastcgi.conf;
		include pathinfo.conf;
	}
	## 其他php都返回404
    location ~ .*\.(php)$
    {
        return 404;
    }

其他

有些网站入口多的数不过来,就只能先用回原先的

	#PHP-INFO-START  PHP引用配置,可以注释或修改
    # 
    # include enable-php-56.conf;
    # 暂时没办法处理的多入口网站就采用原先的
    include enable-php-56-origin.conf;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值