其实这不是一个新概念了,在几年前,中国一些不讲道德的运营商,尤其是地方运营商就开始捕捉用户浏览器的访问记录,然后根据不同用户的访问行为,有 选择地往用户访问的网页里面推送广告。因为运营商掌握着DNS主机,所以他们可以为所欲为地强制改写网站HTML页面,采用往返回页面里写入 JavaScript等方式,来注入广告:

DNS劫持

这是访问55BBS网站时某些用户会在屏幕右下角看到一个京东商城的广告。这样的广告,不但可以在一些中小网站上见到,在国内大型网站上也屡见不鲜。很多网民会立即怀疑自己的机器有没有中病毒或者木马,或者是什么恶意的浏览器插件又在作祟。其实,这都是运营商搞的鬼。

有的用户会坚决地投诉,运营商有自己的白名单,用户在投诉成功以后会账号被加入白名单,不再投放广告。显然他们也不想惹过多的麻烦,这样恶心的事情需要偷偷地干。

另一方面,很多地方运营商会把这样的DNS劫持后注入广告的行为加入到用户协议中去,让用户无话可说。比如北京联通就曾经提供了不同的收费服务,一种是无广告的,一种是包含注入广告的,价格当然是无广告的更高。

在2010年的时候,因为这样的劫持行为,青岛联通还在一场引起轩然大波的索赔案件中败诉,被罚20万元给 百度。索赔从金额来看显然是小事,但是对于中国互联网的成熟还是有积极意义的。在中国,你可以选择的运营商就那么几个,就好比从一堆烂苹果中挑选一个自己 能忍受的。而且这个行业本身就缺乏道德和完善的法律约束,单单靠用户个体抱怨和投诉,无法从根本上解决流氓行为。这也许是互联网发展不够成熟的一个不可回 避的阵痛。

技术实现

理论上说,运营商掌握了HTML页面的全部代码,它可以做任何的事情,真正无缝地植入广告,然后返还给用户。但是,这种广告的植入是批量的行为,如 果要针对不同的网站页面分别去设置广告代码,代价未免太高了一点。另一方面,植入的JavaScript代码片段很容易受到不同DOM环境和 JavaScript代码环境本身的影响,而植入广告,不能影响到原有网站页面的展示和行为。为了尽可能地减少植入广告对原有网站页面的影响,运营商通常 会通过把原有网站页面放置到一个和原页面相同大小的iFrame里面去,通过iFrame来隔离广告代码对原有页面的影响。由于这样的劫持行为会针对不同 用户的某些访问发生,我举例不够方便,为了让大家能够100%地观察到这个效果,我找了这样联通的提示页面来举例:

在访问不存在的网站的时候,比如www.adfasdfasdfasdf.cn这样乱填写的域名,以北京联通为例,它并不会直接返回错误码,而是重定向到这样一个错误提示页面:

DNS劫持

这个重定向后的URL为:http://bjdnserror1.wo.com.cn:8080/issueunziped/bj130404/self0.jsp?UserUrl=www.adfasdfasdfasdf.cn

这样的行为招来非议的人可能不多,毕竟这样的域名确实不存在,对用户和站长带来的影响不大。但是,请注意它左下角和右侧的广告,在这里它注入广告的方式,采用的iFrame嵌套的方式,和上面我提到的劫持行为,是完全一致的。

现在请将上述URL的self0.jsp改成index.htm,也就是:

http://bjdnserror1.wo.com.cn:8080/issueunziped/bj130404/index.htm?UserUrl=www.adfasdfasdfasdf.cn

你可以看到这样的页面:

DNS劫持

刚才提到的广告没有了,对不对?

你可以把index.htm这个页面想象成一个网站的原始页面,然后,运营商创建了这样一个新页面,而把原始页面以iFrame的形式嵌入到其中:

你可以把index.htm这个页面想象成一个网站的原始页面,然后,运营商创建了这样一个新页面,而把原始页面以iFrame的形式嵌入到其中:

<IFRAME id="fulliframe" name="fulliframe" frameSpacing=0 noResize height=1350 marginHeight=0 border=0 src="" frameBorder=0 width="100%" scrolling=no vspale="0"></IFRAME>
<script language="JavaScript" type="text/javascript">frames['fulliframe'].location = window.location.href.replace('self0.jsp','index.htm');
</script>

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

<script src="http://cpro.baidustatic.com/cpro/ui/f.js" type="text/javascript"></script>
<script language="JavaScript" type="text/javascript" src="bdfloat.js"></script>

  怎么破?

  既然已经知道了原理,那么自然就容易想到解决的办法。对于这一类劫持,有一个共同特点是,原有网站的页面,都是放在一个iFrame里面的,那么只要加上这样的脚本,判断如果页面是以一个iFrame加载的,就让父页面重定向到原页面去:(IP地址是不同的!)

if(top!==self)top.location.href=this.location.href;

  当然,你也可以重定向到一个你认为可靠的链接上去,甚至加上你需要的参数等等信息(比如运营商添加的广告代码URL),以记录这一罪证。

  多说几句

  这种劫持方式还显得原始和粗放,而且这些采用iFrame方式实现DNS劫持的运营商还算有一些良心,因为对原有页面的影响较小,但是还有一些地方运营商,只是往原始页面单纯地写入javascript代码,很多情况下都会影响到原始页面的展示和行为,这时候问题就显得麻烦得多了。

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

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

document.write("<script language='javascript' src='http://.../广告脚本链接'></script>");

  我们可以用一点小技巧来对付,比如JavaScript劫持:

document.write = function(){};

  让document.write方法变成一个空函数,让注入代码这一行为失效。当然,具体问题还是需要具体分析,重要的是掌握信息。但是话说回来,我们只是程序员,我们创造的是原始页面,在恶意的运营商手里,靠技术层面的技巧,我们的力量还是太小了。

  此外,联通的这个广告系统做得太缺乏保护性了,只要随便改一改链接,Tomcat版本号等等信息就暴露出来了,如果真要有人想做点什么的话……

DNS劫持

转载于:https://www.cnblogs.com/trustnature/articles/3205742.html

DNS 广告劫持(属于DNS污染)相关推荐

  1. ios如何解除dns被劫持_iOS - DNS劫持

    ******科普** 1.DNS劫持的危害 不知道大家有没有发现这样一个现象,在打开一些网页的时候会弹出一些与所浏览网页不相关的内容比如这样奇(se)怪(qing)的东西 图一 或者这样 图二 ,其实 ...

  2. 修改主机Host配置(可用于屏蔽网站/广告、防止DNS劫持和污染)

    hosts是系统文件(没有扩展名),主要用于解析域名到指定IP. 作用过程 有,获取配置的IP 无 浏览器 输入网址 Hosts配置有否 网址对应的域名 向服务器 IP发起请求 获取DNS服务器 的域 ...

  3. 云漫圈 | 什么是DNS?什么是DNS污染?什么又是DNS劫持?

    戳蓝字"CSDN云计算"关注我们哦! 文章转载自公众号:漫画编程 2019年1月23日下午,我正在公司疯狂的撸着代码,沉浸在我的代码世界中,正在欣赏着自己刚刚写下的一行lambda ...

  4. DNS 劫持 和 DNS 污染

    1,用户需要访问www.liusuping.com这个网站,向DNS服务器提出解析请求. 2,DNS服务器通过检查发现www.liusuping.com域名的IP地址是127.0.0.1,将结果返回给 ...

  5. 什么是DNS劫持和DNS污染?

    说明 我们知道,某些网络运营商为了某些目的,对 DNS 进行了某些操作,导致使用 ISP 的正常上网设置无法通过域名取得正确的 IP 地址.常用的手段有:DNS劫持 和 DNS污染.DNS劫持 和 D ...

  6. wifi 路由 dns 被劫持 手机 /电脑 打开后弹出一些广告窗口

    问题 : wifi 路由 dns 被劫持 手机 /电脑 打开后弹出一些广告窗口 路由器的dns动态ip被劫持了,植入一些黑客的广告 解决方法 : 重置路由器 点击路由器的恢复出厂设置按钮,即是,路由器 ...

  7. 水星路由器上网设置服务器无响应,怎么防止路由器DNS被劫持弹出广告

    DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假 ...

  8. DNS 劫持和DNS 污染

    DNS 是domain name server 的简称. 当然如果你搜索到这篇文章,那么我猜测你可能对DNS也有一定的了解了.所以对DNS的基本知识我就不在介绍了.. DNS 劫持 举个例子,说到劫持 ...

  9. DNS劫持与DNS污染

    某些网络运营商为了某些目的,对DNS进行了某些操作,导致使用ISP的正常上网设置无法通过域名取得正确的IP地址.        某些国家或地区出于某些目的为了防止某网站被访问,而且其又掌握部分国际DN ...

最新文章

  1. 招聘:兼职ASP 高级工程师
  2. Windows 2000/NT/XP管理员密码丢失解决方法
  3. 乘客公交车上被盗 司机该不该停车闭门等警察
  4. 我的android面试经历
  5. iOS工作笔记之NSClassFromString
  6. 管理系统 c++图形界面_锁螺母ERP系统,一站式各国语言管理系统
  7. JavaScript函数式编程入门经典
  8. 现实复杂 devops解决_咖啡店DevOps:变革的复杂性
  9. leetcode - Search in Rotated Sorted Array II
  10. 【剑指offer】62、圆圈中最后剩下的数字
  11. 如何新建Spring Boot工程
  12. unity如何得到所有子对象_Unity3D研究院之自动计算所有子对象包围盒(六)
  13. PreparedStatement解读
  14. 聊天机器人与自动问答技术
  15. 如何决定是否参加培训,一个业内人士的推荐
  16. 高斯函数的傅里叶变换
  17. 达梦数据库大小写这个参数敏感怎样设置
  18. PAT甲级-1118 Birds in Forest (25 分)
  19. CSS3模拟小仓鼠一直奔跑的动画特效
  20. 谁将成为人工智能行业的“领头羊”?

热门文章

  1. 2021年安徽省高考成绩查询窗口,安徽省教育招生考试院:2021年安徽高考查分入口、查分系统...
  2. 利用python做一个可批量将PDF转PPT文件的exe简单小程序
  3. 3.1系统启动画面的背后bootsect.s
  4. Android O版本特性
  5. Spring Security 中产生Feign 401 错误
  6. python爬虫分析
  7. 类打地鼠canvas小游戏
  8. 计算机考试准考证头像黑白
  9. 使用QQ提取图片中的文字
  10. 2001-2020年沪深A股上市公司管理者短视主义指标数据