閱讀目錄
- 問題描述
- 問題分析
- 問題解決
- 為什么
你的網站是否在尾部出現了讓人惱火的廣告?
這次我算是遇到了這些流氓的廣告。那么就讓我們一步步攻克這些惱火的廣告吧。
問題描述
某一天下午開始,我們制作的網站就開始被各種廣告注入,類似上圖這種。
發現問題的有:1、手機端網頁最為普遍,全部都是底部有廣告。(app內嵌H5網頁廣告最多)
2、網頁端網頁極少出現,出現的均為運營商的廣告。
3、無論有無登錄,即使在需要登錄才能被訪問到的頁面也有廣告。
4、廣告時有時無,刷新一遍頁面之后基本不出現半個小時左右。
5、廣告釣魚鏈接很多。
問題分析
首先分析廣告來源:
經過各方面的查找,確定了以下一些可能出現問題的來源。
1、DNS劫持,域名解析方面出現問題。
2、js注入,頁面未對特殊字符限制。
3、iframe注入,頁面被攔截之后加入了iframe標簽,或者利用js注入后加載了廣告的iframe標簽。
4、服務器被黑。
對於廣告本身來說,由於廣告出現的時間隨機,出現的頁面隨機,出現的廣告隨機,等特點,捕捉問題難度提高了。
因為對於廣告本身來說,你不知道你使用的解決方法是否能馬上起到效果。所以也增加了解決的難度。
然后分析一下實際出現的代碼。
我把出現問題的頁面保存了下來進行分析。
得到了以下的代碼
我除去了我本來頁面的代碼。剩下的就是js加載的代碼。
很明顯,出現了兩個問題。
1、頁面底部出現了iframe標簽,本不該存在的。
2、頁面被加載了廣告的js,本來肯定沒有。
3、重復加載了一次我的js並且命名遭到修改simpleTip_wap.js(1)可以看出。
其他中招的頁面也是同樣的道理,這里就不貼了。
下面用chrome查看頁面加載情況。
從加載的過程很明顯可以看出,是js注入,通過偽造了一個js然后我加載了別人的,別人再加載了我的,別人再加載廣告。導致頁面本身不會出現問題,不影響正常使用,但是就是會出現廣告了。
問題解決
作為毫無網站安全經驗的小白。第一件做的事情肯定是查閱各種資料,尋找解決的方案。
先說明一下環境,因為本人是java開發,使用的是jsp頁面。然后服務器使用的是centos7。容器tomcat。頁面只有jquery和一個簡單的提示js。簡單的css。
對於網站安全來說,之前了解的都是有關業務的,這次第一次是這種無賴的頁面。
下面列舉我尋找到的各種解決方案,我都一個個做了嘗試。請看到最后再開始寫代碼
1、meta禁用iframe
使用<meta http-equiv="X-Frame-Options" content="DENY">
據說可以禁用iframe於是拿來試試。
2、js禁用iframe
<script type="text/javascript">
if(top.location!=self.location)top.location=self.location;
</script>
在頁面中使用類似如下的js,有很多的版本,我就列舉其中一個。
3、css讓iframe顯示為空白
<style type="text/css">
iframe{v:expression(this.src='about:blank',this.outerHTML='');}
</style>
畢竟不是前端,所以css懂得不多,也就拷貝過來試一試。
4、在jsp頁面頭部加入協議
response.setHeader("X-Frame-Options", "SAMEORIGIN");
也是為了禁用iframe
5、自己手寫js定時器循環檢測頁面iframe標簽,並置空
失敗了!你別嘗試了!
-----------------------------------------------------上面是從iframe標簽入手,下面是從js方向入手
6、使用js定時程序不停的清楚頁面尾部標簽
</body>
<div id="bottom"></div>
<script type="text/javascript">
setInterval(clearAd,1000);
function clearAd()
{
$("#bottom").nextAll().remove();
}
</script>
有效,但是廣告會有一閃而過,如果把定時時間調快對於頁面來說壓力賊大
7、調整js名字
因為發廣告的人重命名了我的js名字,我認為可能是因為自己的js名字被捕捉到了。
於是重命名了js的名字。
8、調整js位置
因為我的js寫在了頁面底部為了頁面加載的速度,而廣告在底部,我就想會不會是。
所以我將js調整到了head標簽中。
-------------------------------------下面是從服務器和dns角度考慮的
9、更換了dns解析服務器
因為我發現這個頁面放到別的服務器並不出現廣告,或許是dns的問題,換成了官方的域名解析服務器。
10、很多人看到這里肯定已經看不下去了,老哥說了這么多,但是你沒說結果啊!上面的方法到底行不行啊!
然后我要崩潰的告訴你,以上方法均不奏效,或者說效果不好。廣告依舊猖狂。
最后我祭出了我的殺招,也就是最終的解決方案10,HTTPS大法
自從網站加上了https之后再也就沒有出現過廣告了。
然后我解釋一下,為什么我要羅列一下上面的解決方案,一個是讓別人不要走彎路了,一個是因為或許這個方法對我這個廣告沒用,但是對於別人是有用的。我只能過廣告那么多種類,我也真的不確定。
為什么
那么為什么上面9種方法不行呢?我試着亂分析一下。
1、iframe標簽法,我嘗試直接把iframe標簽刪除之后發現廣告依舊存在,也就是說廣告並非都在iframe里面。
2、css方法,js方法。廣告的js加載都是在我自己的js、css加載完成之后再運行他的,所以我們沒有辦法捕獲到他生成的iframe或者生成的js
3、dns方法,相同的域名解析服務器,一個有廣告,一個沒有,問題應該不出現在dns上面。
為什么https行了呢?
加密之后網頁沒有辦法被篡改了。。。
有什么弊端嗎?
好的證書要錢。
不好的證書要命(瀏覽器不信任)