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;
选项。
有两种可能:
副本的所有者实际上窃取了您的代码和数据库,这不太可能。这可以很容易地检查——只需对您网站上的某个页面添加更改,然后查看它是否出现在 doppelgaenger 上。如果副本是独立的,那么那里什么都不会改变。不要忘记使用 Ctrl+F5 来避免看到缓存的内容。
如果是这种情况,您可以向副本的 hosting provider 举报滥用行为。事实上,无论如何你都应该这样做。
如果该副本只是您网站的代理镜像,屏蔽其 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,很可能不会延长。换句话说,你甚至什么都不做,两天后问题就会自行解决。
我原来的页面是http://www.stahlbaron.de/
2 天后,http://www.joma-topflex.ru/ 指向我的页面。我意识到这一点并添加了 ALLOWED_HOSTS = ['.stahlbaron.de']
,但没有帮助。坏 URL 仍然指向我的页面。
我能做什么?我使用了nginx、uwsgi来部署页面。不幸的是,Ngix 没有 deny www.joma-topflex.ru;
选项。
有两种可能:
副本的所有者实际上窃取了您的代码和数据库,这不太可能。这可以很容易地检查——只需对您网站上的某个页面添加更改,然后查看它是否出现在 doppelgaenger 上。如果副本是独立的,那么那里什么都不会改变。不要忘记使用 Ctrl+F5 来避免看到缓存的内容。
如果是这种情况,您可以向副本的 hosting provider 举报滥用行为。事实上,无论如何你都应该这样做。
如果该副本只是您网站的代理镜像,屏蔽其 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,很可能不会延长。换句话说,你甚至什么都不做,两天后问题就会自行解决。