聊聊rel=external nofollow和rel=noopener noreferrer;
target =“_ blank”漏洞 用 rel=”nofollow me noopener noreferrer”防釣魚攻擊;
nofollow是什么意思?
我們知道,反向鏈接是Google PR值的主要計算指標。為了添加反向鏈接,SEO作弊者在論壇和博客等大量發布帶無關鏈接的內容。這些垃圾鏈接的存在給搜索引擎對網頁質量的評估造成一定程度的麻煩。nofollow 正是Google、Yahoo、MSN 為了應對垃圾鏈接(Spam)引入的一個屬性,此屬性目前應該被廣泛采用。
如果A網頁上有一個鏈接指向B網頁,但A網頁給這個鏈接加上了 rel="nofollow" 標注,則搜索引擎不把A網頁計算入B網頁的反向鏈接。
nofollow 怎么用?
如某博客上有垃圾評論:
<a href="http://www.cuoXin.com/">頂頂</a>
以下操作,即進行了 nofollow:
<a href="http://www.cuoXin.com/" rel="nofollow">頂頂</a>
搜索引擎在計算PR值時,不會把這個鏈接計算在內。
重點所在:
大家應該都知道rel=’nofllow’的作用,它是告訴搜索引擎,不要將該鏈接計入權重。因此多數情況下,我們可以將一些不想傳遞權重的鏈接進行nofllow處理;例如一些非本站的鏈接,不想傳遞權重,但是又需要加在頁面中的像 統計代碼、備案號鏈接、供用戶查詢的鏈接等等。
除了rel=’nofollow’還有兩種鏈接屬性形式,一種是rel=’external’,另一種是rel=’external nofollow’。這兩種分別代表什么意思呢?又有何區別呢?
此屬性的意思是告訴搜索引擎,這個鏈接不是本站鏈接,其實作用相當于target=‘_blank’。
為什么要這樣寫呢?因為有些網站因為是采用嚴格的DOCTYPE聲名的,如果你在網頁源碼中的第一行看到:在這種情況下target=”_blank”會失效,因此采用rel=’external’這個參數來替代。
其實上面已經說過rel=’nofollow’ 和 rel=’external’ 兩種屬性的所代表的意思了。這個屬性基本上是相當于將兩種屬性結合起來,大致可以解釋為 “這個鏈接非本站鏈接,不要爬取也不要傳遞權重”。因此在SEO的角度來說,是一種絕對隔絕處理的方法,可以有效減少蜘蛛爬行的流失。
超鏈接 target="_blank" 要增加 rel="nofollow noopener noreferrer" 來堵住釣魚安全漏洞。如果你在鏈接上使用 target="_blank"屬性,并且不加上rel="noopener"屬性,那么你就讓用戶暴露在一個非常簡單的釣魚攻擊之下。
為了告知來自于不受保護的站點的用戶,我們運行一個利用了這個缺陷的腳本。
if (window.opener) {
window.opener.location = "https://dev.to/phishing?referrer="+document.referrer;
}
我相信絕大多數站點都沒有恰當地處理這個問題,為了限制 window.opener的訪問行為,原始頁面需要在每個使用了target="_blank"的鏈接中加上一個rel="noopener"屬性。
然而,火狐不支持這個屬性值,所以實際上你要用 rel="noopener noreferrer"來完整覆蓋。
rel="nofollow me noopener noreferrer"可以拆為兩部份;rel="noopener noreferrer" 和 rel="nofollow";
rel="noopener noreferrer"是指HTML DOM opener屬性和referrer屬性無效;
rel="nofollow"是指告訴搜索引擎"不要追蹤此網頁上的鏈接或不要追蹤此特定鏈接"。
提示:rel="nofollow"主要是針對SEO的,如果你想讓這鏈接被搜索引擎攫取,直接用rel="noopener noreferrer"即可!
從這個問題博主悟出了幾個小道理:
1、漏洞本身我們在寫程序的時候是可以自己防止的,像此文章的漏洞,我們可以在開發程序的時候給任何一個新窗口打開的鏈接都自動增加:rel="noopener noreferrer"屬性;
2、因為此漏洞主要是針對WEB的,WEB主要是用瀏覽器來訪問的,瀏覽器廠商自然也會防止這樣的漏洞從而來提高自己瀏覽器的用戶體驗;
3、安全軟件,像騰訊管家,如果你用此文章的代碼去做惡作劇,電腦上安裝有騰訊管家,你打開不會出現死循環的,因為當窗口打開到幾個的時候會彈出一個“電腦管家,廣告過濾,一鍵開啟“的提示;
因此:做為一個程序員,永遠不要說你寫的代碼是沒有漏洞的,不是沒有漏洞,而是其它人已經幫助你防止了這種漏洞,像以前的facebook同樣也是存在這種漏洞的,現在已經不存在了,因為它給每一個URL鏈接都加上了rel="noopener noreferrer"屬性;
永遠也不要覺得大網站就沒有漏洞,就多么的高大上!
新聞熱點
疑難解答