使用WebSocket绕过广告屏蔽插件

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

现在网络上的广告真的是无所不用其极,在网上冲浪,稍不留神,随时随地都会碰上广告,于是广告屏蔽这个需求,就应运而生了。古语云,道高一尺魔高一丈。今天这篇文章就介绍了BugReplay是如何发现美国成人网站Pornhub使用WebSocket绕过广告屏蔽插件。

这篇文章的本意并非是如何绕开广告屏蔽机制,而是用户了解情况后,在如何反制广告商上缩短探索的时间。

这篇文章重现了BugReplay的工程师发现美国成人网站是如何使用WebSocket绕过广告屏蔽插件的过程,视频演示可在此处观看。

当构建BugReplay的原型时,BugReplay的工程师评估了Chrome捕捉和分析网络流量的不同方法。第一个就是看起来很有前途的chrome.webRequest API。

它的文档有如下的说明:

“使用chrome.webRequest API来观察和分析流量,并拦截、阻止或修改请求。”

这似乎正是BugReplay需要的。

在使用Chrome webRequest API进行实验后,该工程师很快意识到有一个大问题。它不允许用户分析任何WebSocket流量,而这个功能是用户真正需要的东西。

BugReplay发现2012年有一个相关的bug报告:

“chrome.webRequest.onBeforeRequest不拦截WebSocket请求。”

在这份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浏览器记录,你可以看到多个网络触发请求,被AdBlock阻止了:它们在网络流量中被标记为“失败”,如果你单击详细信息中的一条,你能看到失败原因是:net::ERR_BLOCKED_BY_CLIENT. 这是Chrome阻止资源加载时报告的错误。

你可以在网络面板中单独找到WebSocket框架,或者只查看WebSocket创建请求。WebSocket连接的域名是:“ws://ws.adspayformy.site.” ,这不过是针对广告屏蔽插件的玩笑而已。

当WebSocket加载时,浏览器为每个可用于广告的点发送一个带有JSON编码有效载荷的帧。检出一个WebSocket框架,你可以在框架数据中看到广告数据被返回:

  1. zone_13,JavaScript应放置广告。2. 在media_type的图像,让页面知晓用哪种元素来创建(大多数是视频广告,在这篇文章我选择了一张图像,因为这样相对温和)。3. 图像本身是base64编码的,因此可以使用data uri scheme来重建。4. 一个“img_type”(“image/jpeg”)通过data uri。

广告屏蔽插件主要是用webRequest API进行工作的,因此通过在WebSocket上利用base64编码来传输数据构建广告,是一个绕开广告屏蔽的相当聪明的方式。

下一步是什么

2016年10月25日,在Chromium Tracker上,一名贡献者写了一个补丁,增加了使用webRequest API来阻止WebSockets的能力。如果这个补丁被接受,将会集成到Chrome stable版。

广告屏蔽插件作者可以选择在何时或何时推出最新版本的Chrome浏览器,以便让内容提供商(如Pornhub)了解他们在广告屏蔽战争中的下一步行动。

更新

自从BugReplay开始研究这个技术时,AdBlock Plus和uBlock Origin已经发布解决方法来阻止这种技术,而AdBlock和其他人还没有。

对于AdBlock Plus而言,包装器在发送/接收WebSocket消息之前执行虚拟Web请求。扩展将这些虚拟Web请求识别为表示WebSocket消息。如果应该阻止相应的WebSocket消息,它就拦截并阻止它们。然后WebSocket包装器基于虚拟web请求是否被阻止来决定允许/阻止WebSocket消息。

对于uBlock Origin来说,他们发布了一个解决方法,具有“使用CSP指令来屏蔽WebSocket的能力”。

转载于:https://my.oschina.net/xuxueli/blog/790779

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux c头文件#include<sys/types.h>和#include<fcntl.h>头文件总结

#include<sys/types.h>的介绍 是Unix/Linux系统的基本系统数据类型的头文件&#xff0c;含有size_t&#xff0c;time_t&#xff0c;pid_t等类型。linux编程中经常用到的头文件。 clock_t 表示系统时间&#xff08;以时钟周期为单位&#xff09;。   dev_t 用于设备号…

vba怎么安装_学VBA,这些最基础的概念一定要知道

说说VBA的那些事儿VBA是什么&#xff1f;很多使用Excel的人经常会看到这三个字母&#xff0c;那么VBA到底是什么呢&#xff1f;长得神似VB的它到底是干什么的&#xff1f;相信很多人都会有这样的问题&#xff0c;今天就和大家说说有关VBA的那些事儿。1 VBA到底是什么VBA的全称&…

你好骚啊......

1 世贤和品如的结婚照是用当年潘粤明和董洁的结婚照PS的......&#xff08;你好骚啊&#xff09;▼2 还挺有耐心的呢...▼3 这是打算铁定要赢了&#xff01;▼4 请打钱&#xff01;▼5 停车场停猫场&#xff1f;▼6 你的养母&#xff1a;粉红豹、跳跳鱼已上线▼7 这是什么…

演示:使用Sniffer统计与分析流量

演示&#xff1a;使用Sniffer统计与分析流量Sniffer是统计与分析网络数据流量的一个很好的选择。因为Sniffer的“混杂”模式会接收到同一个物理网络内的所有数据帧&#xff0c;无论是广播帧还是发送到一个具体地址的数据帧。如果需要Sniffer监听到所处物理网络不同的数据帧&…

CSS3之阴影

CSS3中新增属性-阴影&#xff0c;可以做出很多漂亮的效果。 文字阴影text-shadow text-shadow属性值的顺序&#xff1a; text-shadow: h-shadow v-shadow blur color; 参数分别表示水平阴影位置&#xff0c;垂直阴影位置&#xff0c;模糊半径&#xff0c;阴影颜色。 一个栗子&a…

推荐搞IT的你读读《软件随想录》

《软件随想录&#xff08;Joel on Software&#xff09;》&#xff0c;这是我多年前看的一本书&#xff0c;也是对我影响很大大的一本书。这不是一本讲软件技术的书&#xff0c;但跟技术强相关&#xff0c;推荐给朋友们读一下。这本书严格来讲&#xff0c;不是作者专门写的书&a…

linux c中的文件描述符与打开文件之间的关系

转载请说明出处&#xff1a;http://blog.csdn.net/cywosp/article/details/38965239 1. 概述在Linux系统中一切皆可以看成是文件&#xff0c;文件又可分为&#xff1a;普通文件、目录文件、链接文件和设备文件。文件描述符&#xff08;file descriptor&#xff09;是内核为了高…

自动为DEV GridView控件添加SizeChanged事件

实现gdv设置的抽象对象&#xff0c;不用每个gdv控件都添加sizechanged事件&#xff0c;只需执行gdc绑定sql函数&#xff0c;在其中会自动添加SizeChanged事件。 //2016.5.13 by sngk //根据控件大小自动调整GridView列宽模式&#xff0c;尽量使列充满 //2016.11.19 实现自动添加…

spss练习数据_读硕博,为你推荐5本最实用的SPSS数据统计书

SPSS (Statistical Product and Service Solutions&#xff09;,是由IBM公司所推出的一系列用于统计学分析运算、数据挖掘、预测分析和决策支持任务的软件产品。SPSS的基本功能包括数据管理、统计分析、图表分析、输出管理等等&#xff0c;也有专门的绘图系统&#xff0c;可以根…

她半年内举报了755篇问题论文,专挑中国“下手”?还牵扯到北大副校长.........

全世界只有3.14 % 的人关注了爆炸吧知识是挑刺还是打假&#xff1f;2020年7月23日&#xff0c;海外一家学术打假网站PubPeer曝出北京大学常务副校长、北大医学部主任、中国工程院院士詹启敏25篇论文涉嫌学术造假。这25篇论文的发表时间在1998年至2019年&#xff0c;贯穿詹启敏从…

linux c通过文件描述符以及write和read方法对文件进行读写

1、write和read方法讲解 #include<unistd.h> ssize_t read(int fd, void *buf,size_t count); fd为文件描述符,buf缓冲区指针,count表示要读取的字节数 返回:读到的字节数,若已经到文件尾端返回0,出错返回-1 #include<unistd.h> ssize_t write (int fd, void *…

C++代码段六

摘自《Primer Plus》浮点数优缺点&#xff1a;1 void test109() 2 { 3 float a2.34E22f; 4 float ba1.0f; 5 cout<<"a "<<a<<endl; 6 cout<<"b-a"<<b-a<<endl; 7 } 输出&#xff1a;a 2.34e022…

提高ASP.NET首页性能的十大方法

本文是我对ASP.NET页面载入速度提高的一些做法&#xff0c;这些做法分为以下部分&#xff1a; http://www.cnblogs.com/xiachufeng/archive/2011/11/09/2242130.html 1.采用 HTTP Module 控制页面的生命周期。 2.自定义Response.Filter得到输出流stream生成动态页面的静态内容(…

C#获取用户客户端系统版本设备名称浏览器

先看效果使用Neget引用包UAParser项目的github &#xff1a;https://github.com/ua-parser/uap-csharpusing UAParser;...string uaString "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 …

雷兽的数据库CAP乱谈之(一)阐述

雷兽的数据库CAP乱谈之&#xff08;一&#xff09;阐述 今天有人问我cap&#xff0c;找了https://my.oschina.net/lilw/blog/169776这片文字&#xff0c; 下面是cap那篇文字的解释&#xff1a; 所谓CAP理论&#xff0c;即&#xff1a; Cosistency 数据的一致性 Availabil…

python kivy ios_Kivy跨平台技术开发iOS

#kivyKivy是一套专门用于跨平台快速应用开发的开源框架&#xff0c;使用Python和Cython编写&#xff0c;对于多点触控有着非常良好的支持&#xff0c;是一套专门用于跨平台快速应用开发的开源框架&#xff0c;使用Python和Cython编写&#xff0c;基于OpenGL ES 2只需一套代码&a…

让我们的标签语义化成为一种习惯好处多多

使用标签语义化的理由可以有无数条&#xff1a; 去掉样式或者样式丢失时页面结构依然清晰分明移动设备能够更加完美的展示你的网页&#xff08;移动设备对css的支持较弱&#xff09;阅读器会根据标签的语义自动解析&#xff0c;呈现更容易阅读的内容形式&#xff08;无障碍阅读…

ABP vNext微服务架构详细教程——简介

简介该系列文章主要展示ABP vNext框架在微服务架构下的用法&#xff0c;提供一套可落地的技术实现思路&#xff0c;并演示各服务在Kubernetes下的部署方案。基础概念ABP vNext基于ASP.NET Core的应用框架&#xff0c;是.Net主流应用开发框架之一。提供基于模块化的灵活项目模板…

linux c之用fopen、fputs、fgets、 fseek来对文件进行写、替换、读

1、函数说明 1、fgets #includechar *fgets(char *s, int size, FILE *stream); 功能:从文件流读取一行,送到缓冲区,使用时注意以下几点: 返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NULL 2、fputs #includeint fputs(const char *s, F…