溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

網(wǎng)站攻防技術(shù)有哪些

發(fā)布時(shí)間:2021-11-17 09:36:04 來源:億速云 閱讀:158 作者:小新 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)網(wǎng)站攻防技術(shù)有哪些,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

1. XSS攻擊

XSS攻擊的全稱是跨站腳本攻擊(Cross Site Scripting),是WEB應(yīng)用程序中最常見到的攻擊手段之一。跨站腳本攻擊指的是攻擊者在網(wǎng)頁中嵌入惡意腳本程序, 當(dāng)用戶打開該網(wǎng)頁時(shí),腳本程序便開始在客戶端的瀏覽器上執(zhí)行,以盜取客戶端cookie、 盜取用戶名密碼、下載執(zhí)行病毒木馬程序等等。

1.1 非持久型XSS

非持久型XSS漏洞,也叫反射型XSS漏洞,一般是通過給別人發(fā)送帶有惡意腳本代碼參數(shù)的URL,當(dāng)URL地址被打開時(shí),特有的惡意代碼參數(shù)被HTML解析、執(zhí)行。

XSS之所以會發(fā)生,是因?yàn)橛脩糨斎氲臄?shù)據(jù)變成了代碼。因此,我們需要對用戶輸入的數(shù)據(jù)進(jìn)行HTML轉(zhuǎn)義處理,將其中的“尖括號”、“單引號”、“引號” 之類的特殊字符進(jìn)行轉(zhuǎn)義編碼。此外還需要注意Web頁面渲染的所有內(nèi)容或者渲染的數(shù)據(jù)都必須來自于服務(wù)端,盡量不要從URL、document.referrer、document.forms等這種DOM API中獲取數(shù)據(jù)直接渲染,前端渲染的時(shí)候?qū)θ魏蔚淖侄味夹枰鰁scape轉(zhuǎn)義編碼。

1.2 持久型XSS

持久型 XSS 漏洞,也被稱為存儲型 XSS 漏洞,一般存在于 Form 表單提交等交互功能,如發(fā)帖留言,提交文本信息等,黑客利用的 XSS 漏洞,將內(nèi)容經(jīng)正常功能提交進(jìn)入數(shù)據(jù)庫持久保存,當(dāng)前端頁面獲得后端從數(shù)據(jù)庫中讀出的注入代碼時(shí),恰好將其渲染執(zhí)行。主要注入頁面方式和非持久型 XSS 漏洞類似,只不過持久型的不是來源于 URL,refferer,forms 等,而是來源于后端從數(shù)據(jù)庫中讀出來的數(shù)據(jù)。持久型 XSS 攻擊不需要誘騙點(diǎn)擊,黑客只需要在提交表單的地方完成注入即可,但是這種 XSS 攻擊的成本相對還是很高。攻擊成功需要同時(shí)滿足以下幾個(gè)條件:POST 請求提交表單后端沒做轉(zhuǎn)義直接入庫;后端從數(shù)據(jù)庫中取出數(shù)據(jù)沒做轉(zhuǎn)義直接輸出給前端;前端拿到后端數(shù)據(jù)沒做轉(zhuǎn)義直接渲染成DOM。

1.2.1 如何防范?

為了防止持久型 XSS 漏洞,需要前后端共同努力:

后端在入庫前應(yīng)該選擇不相信任何前端數(shù)據(jù),將所有的字段統(tǒng)一進(jìn)行轉(zhuǎn)義處理。
后端在輸出給前端數(shù)據(jù)統(tǒng)一進(jìn)行轉(zhuǎn)義處理。
前端在渲染頁面DOM的時(shí)候應(yīng)該選擇不相信任何后端數(shù)據(jù),任何字段都需要做轉(zhuǎn)義處理。

1.3 基于字符集的XSS

其實(shí)現(xiàn)在很多的瀏覽器以及各種開源的庫都專門針對了XSS進(jìn)行轉(zhuǎn)義處理,盡量默認(rèn)抵御絕大多數(shù)XSS攻擊,但是還是有很多方式可以繞過轉(zhuǎn)義規(guī)則,讓人防不勝防。比如「基于字符集的XSS攻擊」就是繞過這些轉(zhuǎn)義處理的一種攻擊方式,比如有些Web頁面字符集不固定,用戶輸入非期望字符集的字符,有時(shí)會繞過轉(zhuǎn)義過濾規(guī)則。

以基于utf-7的XSS為例
utf-7是可以將所有的unicode通過7bit來表示的一種字符集(但現(xiàn)在已經(jīng)從Unicode規(guī)格中移除)。
這個(gè)字符集為了通過7bit來表示所有的文字,除去數(shù)字和一部分的符號,其它的部分將都以base64編碼為基礎(chǔ)的方式呈現(xiàn)。
<script>alert("xss")</script>
可以被解釋為:
+ADw-script+AD4-alert(+ACI-xss+ACI-)+ADw-/script+AD4-
可以形成「基于字符集的XSS攻擊」的原因是由于瀏覽器在meta沒有指定charset的時(shí)候有自動(dòng)識別編碼的機(jī)制,所以這類攻擊通常就是發(fā)生在沒有指定或者沒來得及指定meta標(biāo)簽的charset的情況下。

1.3.1 如何防范?

  • 記住指定<metacharset="utf-8">

  • XML中不僅要指定字符集為utf-8,而且標(biāo)簽要閉合

1.4 未經(jīng)驗(yàn)證的跳轉(zhuǎn)XSS

有一些場景是后端需要對一個(gè)傳進(jìn)來的待跳轉(zhuǎn)的URL參數(shù)進(jìn)行一個(gè)302跳轉(zhuǎn),可能其中會帶有一些用戶的敏感(cookie)信息。如果服務(wù)器端做302跳轉(zhuǎn),跳轉(zhuǎn)的地址來自用戶的輸入,攻擊者可以輸入一個(gè)惡意的跳轉(zhuǎn)地址來執(zhí)行腳本。

1.4.1 如何防范?

  • 對待跳轉(zhuǎn)的URL參數(shù)做白名單或者某種規(guī)則過濾

  • 后端注意對敏感信息的保護(hù),比如cookie使用來源驗(yàn)證。

2. CSRF攻擊

CSRF攻擊的全稱是跨站請求偽造(cross site request forgery), 是一種對網(wǎng)站的惡意利用,你可以這么理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義向第三方網(wǎng)站發(fā)送惡意請求。CRSF能做的事情包括利用你的身份發(fā)郵件、發(fā)短信、進(jìn)行交易轉(zhuǎn)賬等等,甚至盜取你的賬號。

                                網(wǎng)站攻防技術(shù)有哪些

                                                                 圖-CSRF示意圖

盡管聽起來跟XSS跨站腳本攻擊有點(diǎn)相似,但事實(shí)上CSRF與XSS差別很大,XSS利用的是站點(diǎn)內(nèi)的信任用戶,而CSRF則是通過偽裝來自受信任用戶的請求來利用受信任的網(wǎng)站。

2.1 CSRF防御

  • cookie設(shè)置為HttpOnly

CSRF攻擊很大程度上是利用了瀏覽器的cookie,為了防止站內(nèi)的XSS漏洞盜取cookie,需要在cookie中設(shè)置"HttpOnly"屬性,這樣通過程序(如JavascriptS腳本、Applet等)就無法讀取到cookie信息,避免了攻擊者偽造cookie的情況出現(xiàn)。

  • 增加token

CSRF攻擊之所以能夠成功,是因?yàn)楣粽呖梢詡卧煊脩舻恼埱?該請求中所有的用戶驗(yàn)證信息都存在于cookie中,因此攻擊者可以在不知道用戶驗(yàn)證信息的情況下直接利用用戶的cookie來通過安全驗(yàn)證。由此可知,抵御CSRF攻擊的關(guān)鍵在于:在請求中放入攻擊者所不能偽造的信息,并且該信息不存在于cookie之中。鑒于此,系統(tǒng)開發(fā)人員可以在HTTP請求中以參數(shù)的形式加入一個(gè)隨機(jī)產(chǎn)生的token,并在服務(wù)端進(jìn)行token校驗(yàn),如果請求中沒有token或者token內(nèi)容不正確,則認(rèn)為是CSRF攻擊而拒絕該請求。

  • 通過Referer識別

根據(jù)HTTP協(xié)議,在HTTP頭中有一個(gè)字段叫Referer,它記錄了該HTTP請求的來源地址。在通常情況下,訪問一個(gè)安全受限頁面的請求都來自于同一個(gè)網(wǎng)站。比如某銀行的轉(zhuǎn)賬是通過用戶訪問http://www.xxx.com/transfer.do頁面完成,用戶必須先登錄www.xxx.com,然后通過點(diǎn)擊頁面上的提交按鈕來觸發(fā)轉(zhuǎn)賬事件。當(dāng)用戶提交請求時(shí),該轉(zhuǎn)賬請求的Referer值就會是提交按鈕所在頁面的URL(本例為www.xxx.com/transfer.do)。如果攻擊者要對銀行網(wǎng)站實(shí)施CSRF攻擊,他只能在其他的網(wǎng)站構(gòu)造請求,當(dāng)用戶通過其他網(wǎng)站發(fā)送請求到銀行時(shí),該請求的Referer的值是其他網(wǎng)站的地址,而不是銀行轉(zhuǎn)賬頁面的地址。因此,要防御CSRF攻擊,銀行網(wǎng)站只需要對于每一個(gè)轉(zhuǎn)賬請求驗(yàn)證其Referer值,如果是以www.xxx.com域名開頭的地址,則說明該請求是來自銀行網(wǎng)站自己的請求,是合法的。如果 Referer是其他網(wǎng)站的話,就有可能是CSRF攻擊,則拒絕該請求。

3. SQL注入攻擊

所謂SQL注入,就是通過把SQL命令偽裝成正常的HTTP請求參數(shù),傳遞到服務(wù)端,欺騙服務(wù)器最終執(zhí)行惡意的SQL命令,達(dá)到入侵目的。攻擊者可以利用SQL注入漏洞,查詢非授權(quán)信息, 修改數(shù)據(jù)庫服務(wù)器的數(shù)據(jù),改變表結(jié)構(gòu),甚至是獲取服務(wù)器root權(quán)限??偠灾?SQL注入漏洞的危害極大,攻擊者采用的SQL指令,決定攻擊的威力。當(dāng)前涉及到大批量數(shù)據(jù)泄露的攻擊事件,大部分都是通過利用SQL注入來實(shí)施的。

3.1 SQL注入的防御

  • 使用預(yù)編譯語句

預(yù)編譯語句PreparedStatement是java.sql中的一個(gè)接口,繼承自Statement接口。通過Statement對象執(zhí)行SQL語句時(shí),需要將SQL語句發(fā)送給DBMS,由DBMS先進(jìn)行編譯后再執(zhí)行。而預(yù)編譯語句和Statement不同,在創(chuàng)建PreparedStatement對象時(shí)就指定了SQL語句,該語句立即發(fā)送給DBMS進(jìn)行編譯,當(dāng)該編譯語句需要被執(zhí)行時(shí),DBMS直接運(yùn)行編譯后的SQL語句,而不需要像其他SQL語句那樣首先將其編譯。

前面介紹過,引發(fā)SQL注入的根本原因是惡意用戶將SQL指令偽裝成參數(shù)傳遞到后端數(shù)據(jù)庫執(zhí)行,作為一種更為安全的動(dòng)態(tài)字符串的構(gòu)建方法,預(yù)編譯語句使用參數(shù)占位符來替代需要?jiǎng)討B(tài)傳入的參數(shù),這樣攻擊者無法改變SQL語句的結(jié)構(gòu),SQL語句的語義不會發(fā)生改變,即便用戶傳入類似于前面'or'1'='1這樣的字符串,數(shù)據(jù)庫也會將其作為普通的字符串來處理。

Mybatis中#{ }是預(yù)編譯處理,${ }是字符串替換(會導(dǎo)致sql注入,不利于系統(tǒng)的安全性),一般使用$接收dao參數(shù)時(shí),這些參數(shù)一般是字段名,表名等,例如order by {column}。具體區(qū)別可以參考 程序猿DD-Mybatis中$和#千萬不要亂用!

  • 嚴(yán)格限制Web應(yīng)用的數(shù)據(jù)庫的操作權(quán)限,給此用戶提供僅僅能夠滿足其工作的最低權(quán)限,從而最大限度的減少注入攻擊對數(shù)據(jù)庫的危害。

  • 在應(yīng)用發(fā)布之前建議使用專業(yè)的 SQL 注入檢測工具進(jìn)行檢測,以及時(shí)修補(bǔ)被發(fā)現(xiàn)的 SQL 注入漏洞。網(wǎng)上有很多這方面的開源工具,例如 sqlmap、SQLninja等

  • 處理好相應(yīng)的異常

    后臺的系統(tǒng)異常,很可能包含了一些如服務(wù)器版本、數(shù)據(jù)庫版本、編程語言等等的信息,甚至是數(shù)據(jù)庫連接的地址及用戶名密碼,攻擊者可以按圖索驥,找到對應(yīng)版本的服務(wù)器漏洞或者數(shù)據(jù)庫漏洞進(jìn)行攻擊,因此,必須要處理好后臺的系統(tǒng)異常,重定向到相應(yīng)的錯(cuò)誤處理頁面,而不是任由其直接輸出到頁面上。

  • 避免密碼明文存放

    對存儲的密碼進(jìn)行單向Hash,如使用MD5對密碼進(jìn)行摘要,而非直接存儲明文密碼,這樣的好處就是萬一用戶信息泄露,即圈內(nèi)所說的被“拖庫”,黑客無法直接獲取用戶密碼,而只能得到一串跟密碼相差十萬八千里的Hash碼。

類似的還有命令行注入,后端對前端提交內(nèi)容需要完全選擇不相信,并且對其進(jìn)行規(guī)則限制(比如正則表達(dá)式);在調(diào)用系統(tǒng)命令前對所有傳入?yún)?shù)進(jìn)行命令行參數(shù)轉(zhuǎn)義過濾;不要直接拼接命令語句,借助一些工具做拼接、轉(zhuǎn)義預(yù)處理,例如Node.js的shell-escapenpm包。

4. 重放攻擊

重放攻擊就是把以前竊聽到的數(shù)據(jù)原封不動(dòng)地重新發(fā)送給接收方。很多時(shí)候,網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)是加密過的,此時(shí)竊聽者無法得到數(shù)據(jù)的準(zhǔn)確意義。但如果他知道這些數(shù)據(jù)的作用,就可以在不知道數(shù)據(jù)內(nèi)容的情況下通過再次發(fā)送這些數(shù)據(jù)達(dá)到愚弄接收端的目的。例如,有的系統(tǒng)會將鑒別信息進(jìn)行簡單加密后進(jìn)行傳輸,這時(shí)攻擊者雖然無法竊聽密碼,但他們卻可以首先截取加密后的口令然后將其重放,從而利用這種方式進(jìn)行有效的攻擊。再比如,假設(shè)網(wǎng)上存款系統(tǒng)中,一條消息表示用戶支取了一筆存款,攻擊者完全可以多次發(fā)送這條消息而偷竊存款。

4.1 防御手段

  • 加隨機(jī)數(shù)

該方法優(yōu)點(diǎn)是認(rèn)證雙方不需要時(shí)間同步,雙方記住使用過的隨機(jī)數(shù),如發(fā)現(xiàn)報(bào)文中有以前使用過的隨機(jī)數(shù),就認(rèn)為是重放攻擊。缺點(diǎn)是需要額外保存使用過的隨機(jī)數(shù),若記錄的時(shí)間段較長,則保存和查詢的開銷較大。

  • 加時(shí)間戳

該方法優(yōu)點(diǎn)是不用額外保存其他信息。缺點(diǎn)是認(rèn)證雙方需要準(zhǔn)確的時(shí)間同步,同步越好,受攻擊的可能性就越小。但當(dāng)系統(tǒng)很龐大,跨越的區(qū)域較廣時(shí),要做到精確的時(shí)間同步并不是很容易,同時(shí)時(shí)間窗口設(shè)定還要考慮到網(wǎng)絡(luò)傳輸延時(shí)的影響。

在實(shí)際中,常將方法(1)和方法(2)組合使用,這樣就只需保存某個(gè)很短時(shí)間段內(nèi)的所有隨機(jī)數(shù),而且時(shí)間戳的同步也不需要太精確。

5. 上傳文件漏洞

在上網(wǎng)的過程中,我們經(jīng)常會將一些如圖片、壓縮包之類的文件上傳到遠(yuǎn)端服務(wù)器進(jìn)行保存,文件上傳攻擊指的是惡意攻擊者利用一些站點(diǎn)沒有對文件的類型做很好的校驗(yàn)這樣的漏洞,上傳了可執(zhí)行的文件或者腳本,并且通過腳本獲得服務(wù)器上相應(yīng)的權(quán)利,或者是通過誘導(dǎo)外部用戶訪問或者下載上傳的病毒或者木馬文件,達(dá)到攻擊目的。

為了防范用戶上傳惡意的可執(zhí)行文件和腳本,以及將文件上傳服務(wù)器當(dāng)做免費(fèi)的文件存儲服務(wù)器使用,需要對上傳的文件類型進(jìn)行白名單(非黑名單,這點(diǎn)非常重要)校驗(yàn),并且限制上傳文件的大小,上傳的文件,需要進(jìn)行重新命名,使攻擊者無法猜測到上傳文件的訪問路徑。

對于上傳的文件來說,不能簡單的通過后綴名稱來判斷文件的類型,因?yàn)閻阂夤艨梢詫⒖蓤?zhí)行文件的后綴名稱改成圖片或者其他的后綴類型,誘導(dǎo)用戶執(zhí)行。因此,判斷文件類型需要使用更安全的方式。很多類型的文件,起始的幾個(gè)字節(jié)內(nèi)容是固定的,因此,根據(jù)這幾個(gè)字節(jié)的內(nèi)容,就可以確定文件類型,這幾個(gè)字節(jié)也被稱為魔數(shù)(magic number)。

6. DDoS攻擊

DDoS又叫分布式拒絕服務(wù),全稱Distributed Denial of Service,其原理就是利用大量的請求造成資源過載,導(dǎo)致服務(wù)不可用。具體參考資料zoumiaojiang.com-常見Web安全攻防總結(jié)

7. 流量劫持

分為DNS劫持和HTTP劫持,DNS劫持(域名劫持,如果當(dāng)用戶通過某一個(gè)域名訪問一個(gè)站點(diǎn)的時(shí)候,被篡改的DNS服務(wù)器返回的是一個(gè)惡意的釣魚站點(diǎn)的IP,用戶就被劫持到了惡意釣魚站點(diǎn),然后繼而會被釣魚輸入各種賬號密碼信息,泄漏隱私,如何防止域名被劫持。HTTP劫持主要是當(dāng)用戶訪問某個(gè)站點(diǎn)的時(shí)候會經(jīng)過運(yùn)營商網(wǎng)絡(luò),而不法運(yùn)營商和黑產(chǎn)勾結(jié)能夠截獲HTTP請求返回內(nèi)容,并且能夠篡改內(nèi)容,然后再返回給用戶,從而實(shí)現(xiàn)劫持頁面,輕則插入小廣告,重則直接篡改成釣魚網(wǎng)站頁面騙用戶隱私。能夠?qū)嵤┝髁拷俪值母驹颍荋TTP協(xié)議沒有辦法對通信對方的身份進(jìn)行校驗(yàn)以及對數(shù)據(jù)完整性進(jìn)行校驗(yàn)。如果能解決這個(gè)問題,則流量劫持將無法輕易發(fā)生。所以防止HTTP劫持的方法只有將內(nèi)容加密,讓劫持者無法破解篡改,這樣就可以防止HTTP劫持了。HTTPS協(xié)議就是一種基于SSL協(xié)議的安全加密網(wǎng)絡(luò)應(yīng)用層協(xié)議,可以很好的防止HTTP劫持。

關(guān)于“網(wǎng)站攻防技術(shù)有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI