网站内容劫持 广告(不是一个新概念:运营商访问55BBS网站时某些用户会在屏幕右下角看到 )

优采云 发布时间: 2021-11-23 04:12

  网站内容劫持 广告(不是一个新概念:运营商访问55BBS网站时某些用户会在屏幕右下角看到

)

  事实上,这并不是一个新概念。几年前,国内一些*敏*感*词*的运营商,尤其是本土运营商,开始抓取用户浏览器访问记录,然后根据不同用户的访问行为有选择地将用户发送给用户。在访问过的网页中推送广告。因为运营商控制了DNS主机,可以随意强行改写网站 HTML页面,并通过在返回页面中写入JavaScript来注入广告:

  

  这是在访问55BBS网站时,部分用户会在屏幕右下角看到京东商城的广告。这样的广告不仅可以在一些中小网站中看到,在国内的大型网站中也能看到。很多网友会立刻怀疑自己的机器有病毒或木马,或者是一些恶意的浏览器插件造成了麻烦。其实这就是运营商的鬼魂。

  有些用户会坚决投诉。运营商有自己的白名单。投诉成功后,用户将帐号加入白名单,停止投放广告。显然他们不想惹太多麻烦,这种恶心的事情需要暗中进行。

  另一方面,很多本地运营商会在用户协议中加入DNS劫持后注入广告的行为,让用户无话可说。比如北京联通过去提供不同的收费服务,一种是不带广告的,一种是收录注入式广告的,当然不带广告的价格更高。

  2010年,青岛联通也因此类劫持案败诉,被百度*敏*感*词*20万元。索赔金额显然是小事,但对于中国互联网的成熟仍具有积极意义。在中国,你可以选择的经营者只有几个,就像从一堆你能承受的烂苹果中挑一个。而且,行业本身缺乏道德和健全的法律约束,仅靠个人用户投诉和投诉并不能从根本上解决流氓行为。这可能是互联网不成熟的发展带来的不可避免的痛苦。

  技术实现

  从理论上讲,运营商拥有HTML页面的所有代码,它可以做任何事情,真正无缝地插入广告,然后将其返回给用户。但是,这种广告的投放是批量行为。如果要为不同的网站页面单独设置广告代码,成本太高。另一方面,嵌入的 JavaScript 代码片段容易受到不同 DOM 环境和 JavaScript 代码环境本身的影响,嵌入的广告无法影响原创 网站 页面的显示和行为。为了尽量减少嵌入广告对原创网站页面的影响,运营商通常会将原创网站页面放入与原创页面相同大小的iFrame中,并使用 iFrame 隔离广告代码对原创页面的影响。由于不同用户的某些访问会发生这种劫持,所以我的例子不够方便。为了让大家100%观察这个效果,我找了这个联通提示页面作为例子:

  当访问一个不存在的网站,比如这样一个随机填充的域名时,以北京联通为例,它不会直接返回错误代码,而是会重定向到这样一个错误提示页面:

  

  重定向的 URL 是:8080/issueunziped/bj130404/self0.jsp?UserUrl=

  可能没有多少人因为这种行为而受到批评。毕竟这样的域名并不存在,对用户和站长影响不大。不过请注意左下角和右下角的广告。它注入广告和嵌套iFrame的方式与我上面提到的劫持行为完全相同。

  现在请将上述URL的self0.jsp改为index.htm,即:

  :8080/issueunziped/bj130404/index.htm?UserUrl=

  你可以看到这样的页面:

  

  刚才说的广告没了是吧?

  您可以将页面 index.htm 视为 网站 的原创页面。然后,操作员创建这样一个新页面,并以 iFrame 的形式嵌入原创页面:

  您可以将页面 index.htm 视为 网站 的原创页面。然后,操作员创建这样一个新页面,并以 iFrame 的形式嵌入原创页面:

  

frames['fulliframe'].location = window.location.href.replace('self0.jsp','index.htm');

  这样就可以在这个新页面继续写代码,引入广告了:

  怎么破?

  既然知道了原理,就很容易想到解决办法了。对于这种类型的劫持,有一个共同的特点就是原来的网站页面都放在一个iFrame中,那么只需添加这样一个脚本来判断页面是否在iFrame中加载,然后让父页面重定向到原页面:(IP地址不同!)

  if(top!==self)

top.location.href=this.location.href;

  当然,您也可以重定向到您认为可靠的链接,甚至添加您需要的参数等信息(例如运营商添加的广告代码的URL)来记录此*敏*感*词*。

  多说几句

  这种劫持手段还是显得比较原创和泛滥,而这些使用iFrame实现DNS劫持的运营商还是有些良心的,因为对原页面的影响很小,但也有一些本地运营商只是去原页面。在很多情况下,编写 javascript 代码会影响原创页面的显示和行为。这时候问题就麻烦多了。

  首先,我们需要获取这个行为的具体信息。一种方法是掌握页面的原创 JavaScript 方法、DOM 对象列表或浏览器请求的域名列表(类似于白名单)。如果发现列表之外的未知方法、DOM 对象的引入、或意外的 URL 请求,则将此类信息发送到服务器进行分析。

  比如页面被强制注入这样的代码:

  document.write("");

  我们可以用一个小技巧来处理,比如 JavaScript 劫持:

  document.write = function(){};

  让 document.write 方法成为一个空函数,使注入代码的行为无效。当然,具体问题还是要具体分析,重要的是掌握信息。但话虽如此,我们只是程序员。我们创建的是原创页面。在恶意操作者手中,以技术手段,我们的力量还是太小了。

  另外,中国联通的这个广告系统太没有保护了。只需更改链接,就会暴露Tomcat版本号等信息。如果有人真的想做某事...

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线