我的实时项目中的 JS 片段没有出现在我的生产服务器上的代码中

信息安全 Web应用程序 攻击 xss 网络服务器 javascript
2021-08-14 07:38:44

我有一个实时的 Django 网站项目(我们称之为 example.com)。这是一个用户可以提交评论并回复他们的论坛。它有一个 Postgresql 数据库,以及作为 Web 服务器设置的 gunicorn + nginx 反向代理。我托管在 Azure 驱动的虚拟机上,使用基于 Debian 的 Ubuntu 14.04 lts 作为操作系统。最后,请注意 Web 应用程序和服务器位于两个独立的虚拟机实例上。

我怀疑我的服务器可能受到了损害 - 我正处于数据收集阶段,我正在确定 (i) 我的服务器是否确实受到损害 (ii) 我的数据是否也受到损害 (iii) 损害是如何发生的,所以我不会再次被黑客入侵。

在 Django 应用程序中,有一个base.html所有其他.html文件都继承的文件(或extend在 Django 中)。base.html文件包含<head>带有所需元标记等的标记,因此不必在每个模板文件中复制它。

我的base.html文件中有一些不是我编写的 javascript 代码。事实上,我根本不在我的代码中使用 javascript。这个恶意的 javascript 片段将我的用户重定向到广告(这是一种赚钱的黑客)。如果我登录到我的 Web 应用程序的生产服务器和文件(即在文本编辑器中打开它),那么有问题的 javascript 片段nano不会出现在那里base.html

其次,当我在我的实时网站(浏览器:Firefox)上检查元素时,我会在我的网站ev的折叠标签旁边看到一个按钮:

在此处输入图像描述

这显然是在 Mozilla 的代码检查器中调试 JS 的事件按钮。如果我按下它,我会看到:

在此处输入图像描述

我不确定是什么:37(端口 37?)。此外,如果我按下前面的暂停(调试)按钮click,我会被带到我的base.html代码中的一个 JS 片段:

在此处输入图像描述

我的困惑是,当我的生产服务器中的文件似乎没有这些 JS 片段时,它们如何成为我的实时网站的一部分?

我猜想找到黑客的来源需要更深入地研究这一点。我还没有安装 SSL,但我怀疑我的问题无法解决。这是一个两人项目 - 另一个人是非技术人员,文化人类学专业,专门研究南亚研究,所以我敢肯定她与此无关。


我已经准备rules.v4iptables

*filter
# Allow all outgoing, but drop incoming and forwarding packets by default
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# Custom per-protocol chains
:UDP - [0:0]
:TCP - [0:0]
:ICMP - [0:0]

# Acceptable UDP traffic

# Acceptable TCP traffic
-A TCP -p tcp --dport 22 -j ACCEPT
-A TCP -p tcp --dport 80 -j ACCEPT

# Acceptable ICMP traffic

# Boilerplate acceptance policy
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT

# Drop invalid packets
-A INPUT -m conntrack --ctstate INVALID -j DROP

# Pass traffic to protocol-specific chains
## Only allow new connections (established and related should already be handled)
## For TCP, additionally only allow new SYN packets since that is the only valid
## method for establishing a new TCP connection
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP

# Reject anything that's fallen through to this point
## Try to be protocol-specific w/ rejection message
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable

# Commit the changes
COMMIT

*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
1COMMIT

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT

*security
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
1个回答

您从他们的页面中提取的代码是 New Relic Browser 监控。这是 Javascript,它可以让网站跟踪其实时网站和使用它的客户的页面性能。

它提供了有关页面加载时间、您来自世界的哪个地方以及每个元素加载时间的性能数据,以显示性能可能下降的位置。

您可以在http://newrelic.com/browser-monitoring找到有关此产品的更多信息