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

时间:2017-01-06 01:47:00

标签: ajax security networking browser 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文件,但不同的网站除外。还有从我们的域针对youtube.com域发出XHR的整个CORS问题,这意味着如果我想得到favicon.ico我必须做JSONP风格。然而,即使使用普通的<img>我也无法测试因CORS而导致的图像内容,请参阅Get image data in JavaScript?,所以我坚持使用这种方法。

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

干杯。

1 个答案:

答案 0 :(得分:2)

通常,想要播放得很好的网络代理通常会使用可以检测到的其他响应标头来注释HTTP会话。

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

许多公共网站将显示任意请求的标头; redbot就是其中之一。

所以也许您可以要求正在修改其内容的一方访问以下网址:youtube favicon via redbot

一旦你收集了足够的样本,你就可以尝试建立一个探测器。

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