如何验证某个域是否可以从浏览器访问?

Ale*_*lin 5 browser security ajax networking cors

我们的单页应用程序嵌入来自Youtube的视频,供最终用户使用.如果用户确实可以访问Youtube域以及该域页面的内容,那么一切都很有效.

然而,我们经常遇到用户,他们的网络上的网络过滤器框阻止了对Youtube的访问,例如https://us.smoothwall.com/web-filtering/.这里的挑战是过滤器实际上不会终止请求,它只是返回另一个页面,而不是HTTP状态200.该页面通常会说"嘿,对不起,这个内容被阻止".

一种选择是尝试获取https://www.youtube.com/favicon.ico以证明域是可达的.问题是这些过滤器通常涉及自定义SSL证书,以允许他们检查HTTP内容(请参阅:https://us.smoothwall.com/ssl-filtering-white-paper/),所以我不能依赖TLS使用不正确的证书捕获为我交换的内容,我将收到一个完全有效的favicon.ico文件,除了来自不同的站点.还有整个CORS问题从我们的域发出XHR对youtube.com的域名,这意味着如果我想得到它favicon.ico我必须做JSONP风格.然而,即使使用普通的旧版本<img>我也无法测试图像内容因为CORS,请参阅使用JavaScript获取图像数据?所以我坚持这种方法.

是否有任何经过验证的可靠方法来处理这种情况并测试浏览器级别对特定域的可达性?

干杯.

jef*_*mcc 2

一般来说,想要良好运行的 Web 代理通常会使用可检测到的附加响应标头来注释 HTTP 会话。

因此,构建中间人检测器的一种方法可能是检查这些响应标头,并比较位于 MITM 后面和不位于 MITM 后面的结果。

许多公共网站都会显示任意请求的标头;红机器人就是其中之一。

因此,也许您可​​以要求内容被修改的一方访问如下网址:youtube favicon via redbot

一旦收集到足够的样本,您就可以启发式地构建一个探测器。

此外,某些 CDN(例如 Akamai)将允许客户从其网络中的远程代理位置访问 URL。这可能会提供更好的覆盖范围,尽管它们不太可能位于阻塞防火墙后面。