很多站长都遇见过,自己的网页莫名奇妙的多了些垃圾广告的现象。这样的情况,既流失了访问量,又没有什么好处,让人觉得好郁闷呀,那么那些无良的商家是如何做到强行插入广告的呢?他们是通过劫持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会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般都是网络接入服务商提供,比如中国电信,中国移动之类的。
- 查询www.163.com的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存里有这个记录的话,可以直接返回结果,解析结束。如果没有这个结果的话,本地DNS服务器会向**根DNS服务器**进行查询。
- 查询什么呢?其实根DNS服务器里,没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去查询,比如.com/.net等,并给出相应的域服务器的地址。
- 这个时候本地DNS继续向域服务器发出请求,这个例子中,请求的是.com域服务器。而.com域服务器收到请求之后也不会立即返回域名和IP对应关系给本地DNS服务器,本地DNS服务器,你的域名的解析服务器的地址,比如这个例子是163.com主区域的地址
- 最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到IP和域名的对应关系表。本地的DNS不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
- 我们可以用一张图来清楚明了的看懂这个过程:
关于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服务器上的某条记录被人认人为修改了,那么一旦要查询这条记录,得到的就是错误的结果。这样的情况就被称为“域名劫持”
- 什么样的人会做域名劫持这样的事情呢?一般都是一些宽带商(联通宽带、电信宽带、移动宽带、长城宽带、方正宽带等)会在用户使用他们的宽带服务浏览网页时,在这些网页的页面上强行嵌入自己的广告服务。
我们来找个例子看一下吧。
- 这是一个被强行嵌入了广告的页面:
- 使用浏览器调试工具,发现在页面尾部无端多出来一段iframe和嵌入有广告代码的div,。它是宽带商捕捉用户浏览的网页,擅自非法的这些页面上添加自己的广告服务代码。这些代码能给宽带商带来一笔额外的收入。
- 我们如何阻止他们呢?其实我们发现,宽带商非法嵌入广告的方式通常是两种:
在页面尾部加入数个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的区别~
就是这样,今天也是努力的马大侠!