β

阻止并监控web系统服务器端请求外部网址的方法

赵荣涛 58 阅读

当我们安装一个开源系统时,好多开源系统会留有后门,该后门会向开源系统的网站发送我们服务器的信息,比如域名、服务器ip、甚至是管理账号密码等。我们这里只讨论是服务器端发送数据到某外部地址,不讨论由用户前端发送的情况。

我们不希望安装到自己服务器上的系统会往其他网站上发送数据。

解决办法有,比如可以禁止服务器访问外网。这样服务器就不能对外访问任何数据了。但是这样的缺点就是我们彻底不能让服务器访问外网了,我们正常的请求需求也会被禁止了,比如网站常用的短信接口等,都不能用了。

另外一种办法是,把开源系统的后门请求的url找出来,并修改掉。这样最好。但是如果我们还想知道开源系统到底给该url发送了什么数据,我们这里就来讲这种情况的需求。

第一步:把系统请求外部的url的域名,在服务器端修改hosts文件,把ip指向另外一个我们可以监控的服务器上,比如127.0.0.1(也可以是外网ip)。

第二步:在服务器上搭建监控服务。本次讲的是使用nginx + php来搭建监控服务。

nginx配置文件:

server
    {
        listen 80 default_server;

        server_name monitor.*****.com ;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /data0/htdocs/monitor;
       
        location / {
            rewrite ^/(.*) /monitor.php?$1 last;
        }


        location /monitor.php
        {
            try_files $uri =404;
            fastcgi_pass  unix:/tmp/php-cgi.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
        }


    }

站点目录下即/data0/htdocs/monitor下只需要一个文件monitor.php,源码只需要几行:

<?php


//一个域名创建一个目录
$dir = './logs/'.$_SERVER["HTTP_HOST"];

is_dir($dir) OR mkdir($dir, 0777, true);

$fp = fopen($dir.'/'.date('Y').date('m').date('d').'-'.".log.php","a+");
flock($fp, LOCK_EX) ;
fwrite($fp,"<?php exit();?>RUN TIME:".date('Y-m-d H:i:s')."\n" .__FILE__ . "\n".var_export($_SERVER,true)."\n");
flock($fp, LOCK_UN);
fclose($fp);

echo "true";

大家自己试试吧。

作者:赵荣涛
海尔总裁张瑞敏说:“把每一件简单的事做好就是不简单,把每一件平凡的事做好就是不平凡。”

发表评论