我有一个在redhat服务器上的docker容器上运行的node.js Web应用程序,我想强制我的用户不要使用Internet Explorer访问我的网站。我部署了一个Squid代理,并且能够阻止来自IE的流量,但是此解决方案的问题是我必须配置浏览器以使用代理,并且我不能像用户一样真正强制用户在其计算机上配置代理我不能强制他们使用Firefox或Chrome。
有没有办法使用iptables或Firewall-cmd这样的简单工具来阻止IE?
最佳答案
不能。像iptables
这样的防火墙工具只能阻止基于IP级别元数据的数据包(例如,拒绝所有连接,除非这些连接显然来自特定IP地址范围)。您对调用方声称的浏览器唯一拥有的身份是HTTP User-Agent:
header ,该处理涉及一个实际上知道如何处理HTTP协议(protocol)的工具。用标准的HTTP服务器(例如Nginx或Apache)构建的反向代理原则上可以实现此目的。
从安全 Angular 来看,这不是特别可靠。像curl
这样的命令行客户端工具可以提供它喜欢的任何User-Agent:
header 。如果您查看Mozilla's documentation for User-Agent:
,您会发现最受欢迎的浏览器声称是“Mozilla”。 MDN有一个extended warning against checking this header value,它正确地指出:
如果您真的无法以其他任何方式解决此问题,则MDN Browser detection using the user agent页将介绍如何解决此问题。它还有充分的理由不这样做,以及一些典型的解决方法。