django 页面被黑了——如何应对?

django page got hacked - how to react?

我原来的页面是http://www.stahlbaron.de/

2 天后,http://www.joma-topflex.ru/ 指向我的页面。我意识到这一点并添加了 ALLOWED_HOSTS = ['.stahlbaron.de'],但没有帮助。坏 URL 仍然指向我的页面。

我能做什么?我使用了nginx、uwsgi来部署页面。不幸的是,Ngix 没有 deny www.joma-topflex.ru; 选项。

有两种可能:

  1. 副本的所有者实际上窃取了您的代码和数据库,这不太可能。这可以很容易地检查——只需对您网站上的某个页面添加更改,然后查看它是否出现在 doppelgaenger 上。如果副本是独立的,那么那里什么都不会改变。不要忘记使用 Ctrl+F5 来避免看到缓存的内容。

    如果是这种情况,您可以向副本的 hosting provider 举报滥用行为。事实上,无论如何你都应该这样做。

  2. 如果该副本只是您网站的代理镜像,屏蔽其 IP 即可解决问题。你可以在 Nginx 中通过修改你的配置来做到这一点:

    geo $bad_client {
        default                    0;
    
        78.47.49.3/32              1;
    }
    
    server {
        ...
    
        if ($bad_client) {
            return 403;
        }
    
        add_header X-Frame-Options SAMEORIGIN;
    
        ...
    }
    

将 header X-Frame-Options 设置为 SAMEORIGIN 也是一个好主意(参见上面的示例),这样可以保证没有人会使用 iframe 在另一个域上复制您的网站.

编辑:

现在这变得很有趣了。这里发生的事情是这样的:一些(可能很久以前)有人从 Hetzner 购买了一个托管包,注册了域 www.joma-topflex.ru 并将其指向 Hetzner 给他或她的 IP。正如您现在可能已经猜到的那样,该 IP 是 78.47.49.3.

一段时间后,此人可能对该项目失去兴趣并停止向 Hetzner 付款。反过来,Hetzner 将 IP 重新分配给了新客户——你。但是域名www.joma-topflex.ru从来没有被域名所有者指向另一个IP,这种情况经常发生在废弃的项目中。

所以,这里其实没有坏人。 www.joma-topflex.ru 的所有者可能甚至不知道他的域再次可用。

这里真正的问题是您的 Nginx 配置,它将对您的服务器的任何请求代理到您的 Django 应用程序。您需要做的是将您的域明确设置为唯一可接受的服务器名称,如下所示:

server {
    # Delete any other server_name you find around and add this:
    server_name www.stahlbaron.de;

    ...
}

有趣的是,只要它指向您的服务器,您就可以使用域 www.joma-topflex.ru。例如,您可以将另一个服务器块添加到您的 Nginx 配置中,将指令 server_name 设置为 "www.joma-topflex.ru" 并将其用于另一个 Django 应用程序,或您喜欢的任何其他内容。

编辑 2:

顺便说一句,域名 joma-topflex.ru 的付款期限为 2015.04.26,很可能不会延长。换句话说,你甚至什么都不做,两天后问题就会自行解决。