DNS劫持插入广告的原理及解决方法

很多站长都遇见过,自己的网页莫名奇妙的多了些垃圾广告的现象。这样的情况,既流失了访问量,又没有什么好处,让人觉得好郁闷呀,那么那些无良的商家是如何做到强行插入广告的呢?他们是通过劫持DNS来实现的!什么是DNS?什么是DNS劫持呀?你肯定会有许多疑惑,就让我们来看看吧!
让我们来看看吧!

DNS是什么

DNS 是洋文“Domain Name System”的缩写,直译过来就是“域名系统”。

DNS有什么用呢?

简而言之,DNS的作用就是将域名解析成相对应的IP的一套系统。为什么要解析域名成相对应的IP呢?因为IP太复杂人记不住~这个解析的过程,用术语叫做:“域名解析/DNS解析”

域名的结构是什么样的?

我们先来了解一些基础知识,看一看域名的结构。域名是按照“树形结构”组织的。我们知道域名,由’ . ‘来划分,那么它的级别,由右到左降低(上级在右,下级在左)。举个例子:

  • 3g.163.com的上级域名是.163.com
  • 163.com的上级域名是.com
    这里的.com就被称为顶级域名,与.com类似的.net/.top/.gov也是顶级域名

“域名解析”是咋实现

我们可以把“DNS服务器”想象成114查号台,当每台电脑需要翻译某个域名,就找这个域名服务器查询,然后域名服务器会告诉你的电脑,要查询的域名对应的IP地址是啥。

下面简单看一下,电脑进行域名解析的过程
以域名www.163.com为例,当在地址栏输入它后,敲击回车,电脑会进行如下的事情:

关于DNS解析的TTL参数:
配置DNS解析的时候,有一个参数总是很容易忽略。就是DNS解析的TTL参数。这个参数是告诉本地的服务器域名缓存的最长时间。 用阿里云解析来举例,阿里云解析默认的TTL是10分钟,10分钟的含义是,本地DNS服务器对于域名的缓存时间是10分钟,10分钟之后,本地DNS服务器就会删除这条记录,删除之后,如果有用户访问这个域名,就要重复一遍上述复杂的流程。

其实如果网站已进入稳定发展的状态,不会轻易更改IP地址,完全可以将TTL协议设置到最导致24h。

阿里云之所以只将TTL设置成10分钟,是为了让域名解析更快生效而已。因为之前的解析会在最长10分钟之后失效(本地DNS服务器将对应的解析条目删除),然后新的解析生效。如果是24小时,这个生效的时间最长就是24小时,甚至更长(本地DNS服务器要有用户请求,才会发起查询)

什么是域名劫持

  • 从上面的内容了解到,本地DNS服务器会有很多域名记录,每条记录包含域名和IP。当收到域名查询的时候,本地DNS服务器会从这些记录中找到对方想要的,然后回应给对方。
  • 但如果,本地DNS服务器上的某条记录被人认人为修改了,那么一旦要查询这条记录,得到的就是错误的结果。这样的情况就被称为“域名劫持”
  • 什么样的人会做域名劫持这样的事情呢?一般都是一些宽带商(联通宽带、电信宽带、移动宽带、长城宽带、方正宽带等)会在用户使用他们的宽带服务浏览网页时,在这些网页的页面上强行嵌入自己的广告服务。

我们来找个例子看一下吧。

  • 这是一个被强行嵌入了广告的页面:
    html
  • 使用浏览器调试工具,发现在页面尾部无端多出来一段iframe和嵌入有广告代码的div,。它是宽带商捕捉用户浏览的网页,擅自非法的这些页面上添加自己的广告服务代码。这些代码能给宽带商带来一笔额外的收入。
    pyc
  • 我们如何阻止他们呢?其实我们发现,宽带商非法嵌入广告的方式通常是两种:
    在页面尾部加入数个iframe,iframe里的内容是宽带商承揽的广告;
    直接嵌入div
  • 无论是iframe还是div,这些HTML广告代码都有相同的特征。首先来看iframe格式,这些iframe在页面文档中的位置一定都是 body 元素的直接子元素,用CSS 选择器可以这样表示:
body > iframe{....}

以我个人的经验,一般正常的页面里很少有使用iframe的,即使有,也很少有将iframe直接放到body元素下的。所以,对于这些流氓宽带商非法嵌入的iframe,我们可以通过下面的CSS进行屏蔽:

body > iframe{
    opacity:0;
    display:none;
}

把这段代码放入页面里,这非法嵌入的广告iframe,虽然存在,但完全看不见。

  • 第二种情况,就是div形式广告,这些div通常会被放在页面的最后,也就是页面里正常HTML元素的最后一个的后面,只要我能捕捉目标,就能消灭他们,隐藏就好:
div#last-div ~ div {
    display: none; 
    opacity:0;
}
  • 还有一种方式,就是弃用http用https啦,不过代价有点大,有兴趣的可以看一下http和https的区别~

就是这样,今天也是努力的马大侠!

文章作者: Rong
文章链接: http://yoursite.com/2023/05/20/DNS劫持插入广告的原理及解决方法/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 jsRongのBlog