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