我在托管某种数据库管理接口https://www.prettylongdomainname.example/我已经实施HTTP 严格传输安全阻止人们通过 HTTP 访问此网站,因为我不希望我的用户通过未加密的通道提交他们的登录凭据。
现在,一个用户已向www.pld.example
域名提供商注册了该域名,该提供商提供某种“域名重定向服务”,可有效地对我的网站进行中间人攻击。它代理原始网站,并使其在http://www.pld.example/一些用户为了方便而使用较短的 URL,并且没有意识到他们现在正在以纯文本形式将密码发送给第三方。
我可以使用哪些机制来防止此类 MITM 攻击?
答案1
以下是您可能需要考虑的一些策略:
1. 从服务器日志中,找出代理下载网站的方式,并有选择地更改其响应 例如,如果他使用一个特定的提供商,则阻止或更改其地址空间的响应
2. 非正式地通知代理提供者可能就足够了 一定要直接联系他们的滥用部门,而不是销售人员。如果他们的服务器IP是由不同于其域名注册商的公司注册的,请采取阻力最小的路径 - 首先询问总部位于离您所在国家较近的提供商。
3. 根据 TLD,找出网站运营商和/或获得法院命令迫使其 DNS 提供商放弃它们可能是轻而易举的事,也可能是不可能的事情
4. 向以下机构举报Google 安全浏览
使用选项Report Phishing Page
。如果我们的 Google 高层决定这样做,这将为代理用户创建一个巨大的警告,并将该网站从搜索结果中删除。大多数浏览器的大多数用户都在使用 Google 安全浏览阻止列表,因此这不会影响到所有人,但几乎会影响到所有人。
答案2
我们使用这些标头的组合(nginx 的配置):
# Before enabling Strict-Transport-Security headers please read into this topic first.
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
请注意,根据您的应用程序,这些可能会破坏您的网站。在实施它们之前请阅读此处https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
编辑:正如指出的那样,这些不会完全阻止通过外部域名进行代理,您还应该设置额外的步骤,以提供仅通过正确的主机名寻址您的请求:
将默认的 nginx.conf 更改为类似以下内容:
server {
listen 443 ssl http2;
server_name _;
### Set dummy certs
ssl on;
ssl_certificate /usr/local/etc/ssl/dummy.crt;
ssl_certificate_key /usr/local/etc/ssl/dummy.key;
ssl_dhparam /usr/local/etc/ssl/dhparam.pem;
### Block all, allow only vhosts on this server
location / {
limit_req zone=one burst=10 nodelay;
deny all;
return 418 "I'm a teapot"; # Just for the fun of it
}
}
### Virtual Hosting
include /usr/local/etc/nginx/conf.d/*.conf;
}
现在在 /usr/local/etc/nginx/conf.d/(FreeBSD 路径,调整到您的发行版)中创建一个包含您实际站点设置的 domain_name.conf 并为其设置接受的 server_name:
server_name www.example.com example.com;
结合保护标头,可以阻止大多数此类攻击。
然而,一个真正聪明的家伙也可以在反向代理上欺骗 Host 标头。
唯一真正有效的方法曾是 https://developer.mozilla.org/en-US/docs/Web/HTTP/Public_Key_Pinning然而,由于该标准尚未成熟且实施起来相当危险,因此已被弃用。