怎么做網(wǎng)站站內(nèi)優(yōu)化營銷課程培訓(xùn)都有哪些
文章目錄
- 一、XSS攻擊
- 1、反射型XSS
- 攻擊原理
- 2、DOM型XSS
- 攻擊原理
- 3、存儲型XSS
- 攻擊原理
- 防范措施
- 二、CSRF攻擊
- 攻擊原理:
- 防范措施:
- 三、點擊劫持
- 攻擊原理:
- 防范措施:
- 四、項目中如何預(yù)防安全問題
隨著互聯(lián)網(wǎng)的發(fā)展,Web應(yīng)用程序越來越普及,但是Web安全問題也隨之增加。前端開發(fā)者作為Web應(yīng)用程序的構(gòu)建者之一,需要了解和掌握Web安全的基本知識和解決方案。本文將介紹前端開發(fā)者必須知道的Web安全問題和防范措施。
一、XSS攻擊
XSS攻擊指的是跨站腳本攻擊,是一種代碼注入攻擊。攻擊者通過利用網(wǎng)頁開發(fā)時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網(wǎng)頁,使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁程序。這些惡意網(wǎng)頁程序通常是JavaScript,但實際上也可以包括Java、VBScript、ActiveX、Flash或者甚至是普通的HTML。攻擊成功后,攻擊者可能得到包括但不限于更高的權(quán)限(如執(zhí)行一些操作)、私密網(wǎng)頁內(nèi)容、會話和cookie等各種內(nèi)容。
XSS攻類型:
1、反射型XSS
當(dāng)用戶點擊一個惡意鏈接,或者提交一個表單,或者進(jìn)入一個惡意網(wǎng)站時,注入腳本進(jìn)入被攻擊者的網(wǎng)站。Web服務(wù)器將注入一個腳本,比如一個錯誤信息、搜索結(jié)果等,未進(jìn)行過濾直接返回到用戶的瀏覽器上。
攻擊原理
- 攻擊者構(gòu)造出特殊的url,其中包含惡意代碼。
- 用戶打開帶有惡意代碼的url時,網(wǎng)站服務(wù)端將惡意代碼從url取出,拼接在HTML中返回給用戶。
- 用戶瀏覽器接收到響應(yīng)后解析執(zhí)行,混在其中的惡意代碼也被執(zhí)行。
- 惡意代碼竊取用戶數(shù)據(jù)并發(fā)送到攻擊者的網(wǎng)站,或者冒充用戶的行為,調(diào)用目標(biāo)網(wǎng)站接口執(zhí)行攻擊者指定的操作。
2、DOM型XSS
DOM 型 XSS 攻擊,實際上就是前端 JavaScript 代碼不夠嚴(yán)謹(jǐn),把不可信的內(nèi)容插入到了頁面。在使用 .innerHTML、.outerHTML、.appendChild、document.write()等API時要特別小心,不要把不可信的數(shù)據(jù)作為 HTML 插到頁面上,盡量使用 .innerText、.textContent、.setAttribute() 等。
攻擊原理
- 攻擊者構(gòu)造出特殊數(shù)據(jù),其中包含惡意代碼。
- 用戶瀏覽器執(zhí)行了惡意代碼。
- 惡意代碼竊取用戶數(shù)據(jù)并發(fā)送到攻擊者的網(wǎng)站,或者冒充用戶的行為,調(diào)用目標(biāo)網(wǎng)站接口執(zhí)行攻擊者指定的操作。
3、存儲型XSS
惡意腳本永久存儲在目標(biāo)服務(wù)器上。當(dāng)瀏覽器請求數(shù)據(jù)時,腳本從服務(wù)器傳回并執(zhí)行,影響范圍比反射型和DOM型XSS更大。存儲型XSS攻擊的原因仍然是沒有做好數(shù)據(jù)過濾:前端提交數(shù)據(jù)至服務(wù)端時,沒有做好過濾;服務(wù)端在接受到數(shù)據(jù)時,在存儲之前,沒有做過濾;前端從服務(wù)端請求到數(shù)據(jù),沒有過濾輸出。
攻擊原理
- 攻擊者將惡意代碼提交到目標(biāo)網(wǎng)站的數(shù)據(jù)庫中。
- 用戶打開目標(biāo)網(wǎng)站時,網(wǎng)站服務(wù)端將惡意代碼從數(shù)據(jù)庫取出,拼接在 HTML 中返回給瀏覽器。
- 用戶瀏覽器接收到響應(yīng)后解析執(zhí)行,混在其中的惡意代碼也被執(zhí)行。
- 惡意代碼竊取用戶數(shù)據(jù)并發(fā)送到攻擊者的網(wǎng)站,或者冒充用戶的行為,調(diào)用目標(biāo)網(wǎng)站接口執(zhí)行攻擊者指定的操作。
防范措施
-
輸入檢查和過濾:對所有用戶輸入進(jìn)行嚴(yán)格的檢查和過濾,防止惡意代碼注入。這包括對表單輸入、URL參數(shù)、Cookie等進(jìn)行檢查。確保不允許直接在頁面上輸出用戶提交的數(shù)據(jù),特別是在HTML中,應(yīng)該對特殊字符進(jìn)行轉(zhuǎn)義。
-
使用POST代替GET:因為GET請求會將數(shù)據(jù)放在URL中,容易被惡意用戶利用來執(zhí)行XSS攻擊。而POST請求則將數(shù)據(jù)放在請求體中,更安全。
-
避免直接在Cookie中泄露用戶隱私:比如email、密碼等。其次通過使cookie和系統(tǒng)ip綁定來降低cookie泄露后的危險。
-
驗證碼:防止腳本冒充用戶提交危險操作。
-
使用HTTPOnly標(biāo)記來限制cookie的訪問,防止cookie被盜用。
當(dāng)用戶的登錄憑證存儲于服務(wù)器的 session 中,而在瀏覽器中是以 cookie 的形式存儲的。很多XSS攻擊目標(biāo)都是竊取用戶cookie偽造身份認(rèn)證??梢酝ㄟ^在 cookie 中設(shè)置 HttpOnly 屬性,js腳本將無法讀取到 cookie 信息。cookies.set(name, value, {httpOnly: true // 默認(rèn)為 true })
-
內(nèi)容安全策略(CSP):防XSS等攻擊的利器。CSP 的實質(zhì)就是白名單制度,開發(fā)者明確告訴客戶端,哪些外部資源可以加載和執(zhí)行,等同于提供白名單。它的實現(xiàn)和執(zhí)行全部由瀏覽器完成,開發(fā)者只需提供配置。CSP 大大增強(qiáng)了網(wǎng)頁的安全性。攻擊者即使發(fā)現(xiàn)了漏洞,也沒法注入腳本,除非還控制了一臺列入了白名單的可信主機(jī)。
-
通過 HTTP 頭信息的Content-Security-Policy的字段
//該頁面只允許當(dāng)前源和https://apis.example.com 這 2 個源的腳本加載和執(zhí)行 Content-Security-Policy: script-src 'self' https://apis.example.com
-
通過網(wǎng)頁的標(biāo)簽
//該頁面只允許當(dāng)前源和https://apis.example.com 這 2 個源的腳本加載和執(zhí)行 <meta http-equiv="Content-Security-Policy" content="script-src 'self' https://apis.example.com">
-
二、CSRF攻擊
跨站請求偽造(CSRF)是一種黑客攻擊技術(shù),攻擊者通過偽裝來自受信任的用戶的請求來攻擊受信任的網(wǎng)站,利用網(wǎng)站對于用戶網(wǎng)頁瀏覽器的信任,挾持用戶當(dāng)前已登陸的Web應(yīng)用程序,去執(zhí)行并非用戶本意的操作。
攻擊原理:
-
用戶登錄、瀏覽并信任正規(guī)網(wǎng)站W(wǎng)ebA,同時,WebA通過用戶的驗證并在用戶的瀏覽器中產(chǎn)生Cookie。
-
攻擊者WebB通過在WebA中添加圖片鏈接等方式誘導(dǎo)用戶User訪問網(wǎng)站W(wǎng)ebB。
-
在用戶User被誘導(dǎo)訪問WebB后,WebB會利用用戶User的瀏覽器訪問第三方網(wǎng)站W(wǎng)ebA,并發(fā)出操作請求。
-
用戶User的瀏覽器根據(jù)WebB的要求,帶著步驟一中產(chǎn)生的Cookie訪問WebA。
防范措施:
-
使用隨機(jī)的Token來驗證用戶請求的合法性。
服務(wù)端給用戶生成一個token,加密后傳遞給用戶,用戶在提交請求時,需要攜帶這個token,服務(wù)端驗證token是否正確。 -
同源檢測:阻止不同域的訪問
請求來源限制,此種方法成本最低,但是并不能保證 100% 有效,因為服務(wù)器并不是什么時候都能取到 Referer,而且低版本的瀏覽器存在偽造 Referer 的風(fēng)險。 -
涉及到數(shù)據(jù)修改操作嚴(yán)格使用 post 請求而不是 get 請求
get 的 URL 會被放在瀏覽器歷史和 WEB 服務(wù)器日志里面,如果把關(guān)鍵數(shù)據(jù)放在 get 里面,被人偷窺了瀏覽器,會造成數(shù)據(jù)泄露。而 post 日志沒有記錄,也不會保留 URL,只要數(shù)據(jù)庫服務(wù)器不被入侵,基本還是安全的。 -
使用驗證碼
強(qiáng)制用戶必須與應(yīng)用進(jìn)行交互,才能完成最終請求。此種方式能很好的遏制 CSRF,但是用戶體驗相對差。
三、點擊劫持
點擊劫持(click hijacking)也稱為 UI 覆蓋攻擊。它通過一些內(nèi)容(如游戲)誤導(dǎo)被攻擊者點擊,雖然被攻擊者點擊的是他所看到的網(wǎng)頁,但其實所點擊的是另一個置于原網(wǎng)頁上面的透明頁面。
攻擊原理:
-
攻擊者構(gòu)建了一個非常有吸引力的網(wǎng)頁
-
將被攻擊的頁面放置在當(dāng)前頁面的 iframe 中
-
使用樣式將 iframe 疊加到非常有吸引力內(nèi)容的上方
-
將iframe設(shè)置為100%透明
-
用戶在不知情的情況下點擊按鈕,觸發(fā)執(zhí)行一些其他命令。
防范措施:
-
使用X-Frame-Options防止網(wǎng)頁被iframe:X-FRAME-OPTIONS是微軟提出的一個http頭,專門用來防御利用iframe嵌套的點擊劫持攻擊。
- DENY // 拒絕任何域加載
- SAMEORIGIN // 允許同源域下加載
- ALLOW-FROM // 可以定義允許frame加載的頁面地址
-
判斷當(dāng)前頁面是否被嵌入到 iframe 中。
if(top.location != self.location){top.location = window.location; }
四、項目中如何預(yù)防安全問題
-
強(qiáng)化安全意識:在項目啟動階段,就需要強(qiáng)調(diào)安全問題的重要性,強(qiáng)化所有項目成員的安全意識。讓每個人都明白自己在保障項目安全方面的責(zé)任,并積極參與到安全工作中來。
-
建立安全管理制度:制定一套完善的安全管理制度,明確各項安全管理要求和標(biāo)準(zhǔn)。包括安全培訓(xùn)制度、安全操作規(guī)程、安全檢查制度等,確保每個環(huán)節(jié)都得到有效管理。
-
實施安全性設(shè)計:從設(shè)計階段開始,就需要注意安全性設(shè)計。遵循安全性設(shè)計原則和標(biāo)準(zhǔn),考慮可能出現(xiàn)的攻擊和漏洞,采取相應(yīng)的防范措施。同時,需要加強(qiáng)數(shù)據(jù)加密、訪問控制、權(quán)限管理等關(guān)鍵環(huán)節(jié)的安全性設(shè)計。
-
加強(qiáng)代碼審查:建立代碼審查機(jī)制,確保代碼質(zhì)量和安全性。通過定期的代碼審查,可以發(fā)現(xiàn)并糾正潛在的安全漏洞和錯誤。同時,需要關(guān)注最新的安全漏洞和補(bǔ)丁,及時修復(fù)和升級系統(tǒng)。
-
實施安全培訓(xùn):對項目成員進(jìn)行安全培訓(xùn),提高他們的安全意識和技能。培訓(xùn)內(nèi)容包括安全基礎(chǔ)知識、安全漏洞防范、應(yīng)急響應(yīng)等。定期組織安全培訓(xùn)和演練,增強(qiáng)項目成員的安全意識和應(yīng)對能力。
-
建立安全測試機(jī)制:在項目開發(fā)過程中,建立安全測試機(jī)制。包括安全性測試、可靠性測試、性能測試等。通過模擬各種攻擊場景和漏洞利用方式,發(fā)現(xiàn)并修復(fù)潛在的安全問題。同時,需要關(guān)注最新的漏洞利用方式和攻擊手段,及時調(diào)整測試策略。
-
做好數(shù)據(jù)保護(hù):保護(hù)項目中的敏感數(shù)據(jù)是預(yù)防安全問題的關(guān)鍵之一。采取加密、訪問控制、數(shù)據(jù)備份等措施,確保數(shù)據(jù)的機(jī)密性和完整性。同時,需要關(guān)注數(shù)據(jù)的安全審計和監(jiān)控,及時發(fā)現(xiàn)并應(yīng)對數(shù)據(jù)安全事件。
-
定期審查和更新:定期審查和更新項目的安全策略和流程,以適應(yīng)新的安全威脅和業(yè)務(wù)需求。同時,需要關(guān)注最新的安全漏洞和補(bǔ)丁,及時修復(fù)和升級系統(tǒng)。