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