如何防止第三方代理HTTPS网站?

如何防止第三方代理HTTPS网站?

我在托管某种数据库管理接口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然而,由于该标准尚未成熟且实施起来相当危险,因此已被弃用。

相关内容