作者丨Q新闻
编辑丨小智
“本周要闻:
美国成人网站Pornhub使用WebSocket绕过广告屏蔽插件;持续增长的全球第二大Web服务器Nginx有机会取代Apache吗?什么时候?想要取代JavaScript的谷歌Dart又回来了,这次想干啥?
NEWS美国成人网站使用WebSocket绕过广告屏蔽插件
现在网络上的广告真的是无所不用其极,在网上冲浪,稍不留神,随时随地都会碰上广告,于是广告屏蔽这个需求,就应运而生了。古语云,道高一尺魔高一丈。今天这篇文章就介绍了BugReplay是如何发现美国成人网站Pornhub使用WebSocket绕过广告屏蔽插件。
这篇文章的本意并非是如何绕开广告屏蔽机制,而是用户了解情况后,在如何反制广告商上缩短探索的时间。
这篇文章重现了BugReplay的工程师发现美国成人网站是如何使用WebSocket绕过广告屏蔽插件的过程,视频演示可在此处观看:
#/view
当构建BugReplay的原型时,BugReplay的工程师评估了Chrome捕捉和分析网络流量的不同方法。第一个就是看起来很有前途的chrome.webRequest API。
它的文档有如下的说明:
「使用chrome.webRequest API来观察和分析流量,并拦截、阻止或修改请求。」
这似乎正是BugReplay需要的。
在使用Chrome webRequest API进行实验后,该工程师很快意识到有一个大问题。它不允许用户分析任何WebSocket流量,而这个功能是用户真正需要的东西。
BugReplay发现2012年有一个相关的bug报告:
「chrome.webRequest.onBeforeRequest不拦截WebSocket请求。」
?id=
在这份Bug报告中,用户抱怨未能阻止WebSockets,以致网站可以轻易的绕过广告屏蔽插件。如果WebSocket数据通过webRequest API对Chrome扩展不可见,没有一些重型攻击他们不能被屏蔽。
最初,理论上屏蔽广告似乎是有风险的。采用这种技术的网站的案例非常模糊。在2016年8月,一位来自拥有Pornhub.com(MindGeek)的公司的员工,开始反对Chrome API添加WebSocket屏蔽功能。依照Alexa的数据,Pornhub是互联网上第63个访问量最大的网站。
BugReplay检查了几个MindGeek的网站,果不其然,他们发现,即使已经安装Adblock Plus插件,也能看到这些来自MindGeek所属的广告网络中的Pornhub广告,被标识位“垃圾广告”。
在下面的截图中,你可以在网页顶部看到一个横幅,表明该网站已发觉用户使用了广告屏蔽插件,并邀请用户订阅收费广告免费版的网站。在网页的右侧你能看到广告。
他们是如何做到的?
当用户访问Pornhub.com时,它会尝试检测您是否有广告屏蔽插件,如果检测到一个,它就打开一个WebSocket连接,作为传递广告的备份机制。
查看BugReplay浏览器记录:
#/view
你可以看到多个网络触发请求,被AdBlock阻止了:它们在网络流量中被标记为「失败」,如果你单击详细信息中的一条,你能看到失败原因是:net::ERR_BLOCKED_BY_CLIENT. 这是Chrome阻止资源加载时报告的错误。
你可以在网络面板中单独找到WebSocket框架,或者只查看WebSocket创建请求。WebSocket连接的域名是:「ws://ws.adspayformy.site.」,这不过是针对广告屏蔽插件的玩笑而已。
当WebSocket加载时,浏览器为每个可用于广告的点发送一个带有JSON编码有效载荷的帧。检出一个WebSocket框架,你可以在框架数据中看到广告数据被返回:
在zone_13,JavaScript应放置广告。
在media_type的图像,让页面知晓用哪种元素来创建(大多数是视频广告,在这篇文章我选择了一张图像,因为这样相对温和)。
图像本身是base64编码的,因此可以使用data uri scheme来重建。
一个「img_type」(「image/jpeg」)通过data uri。
广告屏蔽插件主要是用webRequest API进行工作的,因此通过在WebSocket上利用base64编码来传输数据构建广告,是一个绕开广告屏蔽的相当聪明的方式。
下一步是什么
2016年10月25日,在Chromium Tracker上,一名贡献者写了一个补丁,增加了使用webRequest API来阻止WebSockets的能力。如果这个补丁被接受,将会集成到Chrome stable版。见:
?id=#c77
广告屏蔽插件作者可以选择在何时或何时推出最新版本的Chrome浏览器,以便让内容提供商(如Pornhub)了解他们在广告屏蔽战争中的下一步行动。
更新
自从BugReplay开始研究这个技术时,AdBlock Plus和uBlock Origin已经发布解决方法来阻止这种技术,而AdBlock和其他人还没有。
对于AdBlock Plus而言,包装器在发送/接收WebSocket消息之前执行虚拟Web请求。扩展将这些虚拟Web请求识别为表示WebSocket消息。如果应该阻止相应的WebSocket消息,它就拦截并阻止它们。然后WebSocket包装器基于虚拟web请求是否被阻止来决定允许/阻止WebSocket消息。
对于uBlock Origin来说,他们发布了一个解决方法,具有“使用CSP指令来屏蔽WebSocket的能力”。
本文由刘志勇编译,原文链接见:
http://blog.bugreplay.com/post/152579164219/pornhubdodgesadblockersusingwebsockets
NEWSNginx何时取代Apache?
Nginx和Apache都是流行的开源Web服务器。Apache是世界使用排名第一的Web服务器软件,是Apache软件基金会的一个开源Web服务器,几乎所有的计算机平台都可以运行,由于其开放的API接口,使得Apache有超多的模块,基本想到的都可以找到;加之历史悠久,因此相关文档齐全,因此,长期雄踞Web服务器市场的巅峰。
而Nginx最初是俄罗斯程序员Igor Sysoev开发的轻量级开源Web服务器,同时也是一个反向代理服务器和电子邮件代理服务器,并在一个BSD-like协议下发行。
Apache是顶级的Web服务器,但是Nginx持续增长,而Microsoft IIS几十年来首次下降到10%以下。
用户自然会关心,Nginx会不会取代Apache,以及何时能取代Apache?Nginx首席执行官Gus Robertson近日就表示,这两者的使用场景并不同,并不存在谁取代谁的问题。
Nginx已经成为第二大Web服务器。它很久以前就超越了微软的Internet Information Services(IIS),长期以来,它一直逼近顶级Web服务器Apache。但是,Nginx首席执行官Gus Roberston在接受采访时表示,Apache和Nginx的用户范围并不相同。
Robertson表示:「我认为Apache是一个卓越的Web服务器。但Nginx和它不是一个相同的使用案例。我们不认为Apache是一个竞争对手,我们的客户使用Nginx来替换硬件负载均衡和构建微服务,这两者都不是Apache干的事。」
事实上,Roberston发现许多用户同时使用两个开源Web服务器,他说,客户在Apache的前端使用Nginx进行负载平衡和应用,它们的架构完全不同,可以提供更好的并发性能。他还表示,在云配置方面,Nginx表现会更好。
Roberston总结道:「我们(Nginx)是唯一仍在增长的Web服务器,而其他Web服务器正在萎缩。」
然而这不是事实。根据10月份Netcraft的Web服务器调查
https://news.netcraft.com/archives/2016/10/21/october-2016-Web-server-survey.html
Apache本月活跃网站增长最多,获得180万;而Nginx增长40万,仅次于Apache。
这些增长,加上微软损失的120万活跃网站,导致微软的活跃网站份额下降到9.27%,首次跌至10%以下。Apache在市场份额提高了0.19%,并继续占据主导地位,现在拥有46.30%的活跃网站。尽管如此,多年来Apache一直在慢慢下降,而Nginx现在只有19%。
目前,Nginx的开发人员正在继续改进开放核心商业网络服务器Nginx Plus,以求提高其竞争力。Web服务器使用最新版本的Nginx Plus Release 11(R11),更易于扩展和自定义,并支持更广泛的部署。
最大的提升是动态模块(dynamic modules)的二进制兼容性。这意味着为开源Nginx软件编译的动态模块可以加载到Nginx Plus中。
还意味着开发人员可以利用大量的第三方Nginx模块来扩展和添加功能到Nginx Plus,从一系列开源模块到商业模块。开发人员可以基于支持的Nginx Plus核心创建自定义扩展、附加组件和新产品。
Nginx Plus R11还增加了其他增强功能:
改进的TCP/UDP负载平衡:新功能包括SSL服务器名称路由、新的日志功能、附加变量和改进的Proxy协议支持。这些新功能增强了调试功能,使开发者能够支持更广泛的企业应用程序。
通过IP地址更好地进行地理定位:第三方GeoIP2模块现已通过认证,并提供给Nginx Plus客户。相比原始GeoIP模块,新版本提供了更为本地化和更丰富的位置详细信息。
增强的nginScript模块:nginScript是基于JavaScript的Nginx Plus的下一代配置语言。开发者能使用新功能在Stream(TCP/UDP)模块中即时修改请求和响应数据。
可以预见的是,在这场旷日持久的角逐顶级Web服务器的战争中,Nginx会同Apache进行激烈的竞争。而微软的IIS,则继续缓慢地衰落,走向消亡。
本文由刘志勇编译,原文链接见:
http://www.zdnet.com/article/when-to-use-nginx-instead-of-apache/
NEWS谷歌Dart重返舞台
谷歌Dart曾经踌踌满志地想要取代JavaScript成为web开发的首选语言。然而在一年半前,谷歌放弃了这个想法。因为Dart不仅仅在语言本身,包括它的整个生态圈,都比JavaScript落后了一大截。所以Dart最终还是沦落到了跟TypeScript和CoffeeScript一样的命运——成为另一个可以被编译成JavaScript的语言。
然而,在沉寂了一段时间之后,在10月底举行的慕尼黑Dart开发者大会上,Dart带着赞新的面貌重返我们的视野。
事实上,尽管Dart无法像当初声称的那样可以取代JavaScript,但在谷歌内部,它确实是一门很成功的web开发语言。谷歌的AdWords、AdSense和Fiber项目团队开始把Dart融入他们的前端应用开发。一项内部报告表明,Dart可以帮助他们提升25%到100%的前端开发效率。谷歌内部的Dart代码量比去年增长了3.5倍。
在谷歌之外,Wrike、Workiva、Blossom等公司也在使用Dart。所以不管在内部还是外部,Dart都有它的市场。
Dart团队不再把精力放在如何构建Dart运行时上,而是集中精力做好Dart到JavaScript的编译器以及相关的工具。因为同时在Chrome浏览器里运行JavaScript运行时和Dart运行时会带来很多问题,比如两种语言之间无法进行交互。
Dart语言本身也是带来了一些新的特性。比如强类型支持、泛型方法。Dart到JavaScript的编译器也得到改进,在编译速度上有了大幅度的提升。
在大会上,Dart团队启动了AngularDart 2.0项目,使用Dart语言作为Angular的实现。同时还发布了基于AngularDart的Material Design的内部开发者预览版。
另外,谷歌启动了一个新项目Flutter。Flutter使用响应式函数编程模型,允许开发者基于单个代码库开发跨平台的移动应用。虽然Flutter的想法跟Facebook的React Native如出一辙,不过Flutter团队还是希望能够为开发者提供一套基于Dart的完整解决方案。
从Dart在谷歌内部的受欢迎程度来看,Dart的势头会继续增长。这个也就是谷歌想要通过这次大会传达给我们的信息。不过要想在外部同样获得开发者的支持,Dart团队仍然任重而道远。
本文由薛命灯编译,原文链接见:
今日荐文
点击下方图片即可阅读
一篇文了解的技术之道:系统、架构、朋友圈……
喜欢我们的会点赞,爱我们的会分享!