最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

前端面試八股文之安全性問題

2021-06-07 15:41 作者:壞蛋Dan丶  | 我要投稿

這題面試時(shí)也幾乎必問


1. XSS(Cross-Site Scripting)

中文翻譯過來是“跨站腳本攻擊”,由于縮寫和CSS一樣,因此使用XSS區(qū)分。

這種攻擊是一種代碼注入攻擊。攻擊者通過在目標(biāo)網(wǎng)站上注入惡意腳本,使之在用戶的瀏覽器上運(yùn)行。利用這些惡意腳本,攻擊者可獲取用戶的敏感信息如 Cookie、SessionID 等,進(jìn)而危害數(shù)據(jù)安全。

理論上所有可輸入的地方都存在XSS攻擊風(fēng)險(xiǎn)。

這么說應(yīng)該有些不好理解,那么說一個(gè)實(shí)例:

當(dāng)你在實(shí)現(xiàn)評(píng)論功能時(shí),你在拿到評(píng)論內(nèi)容后使用innerHTML將它拼接到內(nèi)容區(qū)并渲染,那么就有可能遭到XSS攻擊:用戶輸入的如果是一段標(biāo)簽字符串:<h1>這是XSS攻擊</h1>,那么在渲染時(shí)也會(huì)被渲染出來。這就是一個(gè)最簡單的XSS攻擊。

常見的XSS攻擊有以下這些:

  • 在 HTML 中內(nèi)嵌的文本中,惡意內(nèi)容以 script 標(biāo)簽形成注入(剛剛的例子)。

  • 在內(nèi)聯(lián)的 JavaScript 中,拼接的數(shù)據(jù)突破了原本的限制(字符串,變量,方法名等),使用ajax獲取后端的數(shù)據(jù)再使用eval轉(zhuǎn)換拼接。

  • 在標(biāo)簽屬性中,惡意內(nèi)容包含引號(hào),從而突破屬性值的限制,注入其他屬性或者標(biāo)簽(使用"將屬性默認(rèn)的"隔開然后再接入自己的代碼)。

  • 在標(biāo)簽的 href、src 等屬性中,包含 javascript: (偽協(xié)議)等可執(zhí)行代碼,當(dāng)用戶點(diǎn)擊鏈接時(shí)便會(huì)觸發(fā)XSS攻擊。

  • 在 onload、onerror、onclick 等事件中,注入不受控制代碼。

  • 在 style 屬性和標(biāo)簽中,包含類似 expression(JS代碼) 的 CSS 表達(dá)式代碼(新版本瀏覽器已經(jīng)可以防范)。

關(guān)于CSS的expression用法可以百度下。


XSS可分為以下三個(gè)類型:


1. 存儲(chǔ)型

存儲(chǔ)型 XSS 的攻擊步驟:

  1. 攻擊者將惡意代碼提交到目標(biāo)網(wǎng)站的數(shù)據(jù)庫中。

  2. 用戶打開目標(biāo)網(wǎng)站時(shí),網(wǎng)站服務(wù)端將惡意代碼從數(shù)據(jù)庫取出,拼接在 HTML 中返回給瀏覽器。

  3. 用戶瀏覽器接收到響應(yīng)后解析執(zhí)行,混在其中的惡意代碼也被執(zhí)行。

  4. 惡意代碼竊取用戶數(shù)據(jù)并發(fā)送到攻擊者的網(wǎng)站,或者冒充用戶的行為,調(diào)用目標(biāo)網(wǎng)站接口執(zhí)行攻擊者指定的操作。

存儲(chǔ)型 XSS(又被稱為持久性XSS)攻擊常見于帶有用戶保存數(shù)據(jù)的網(wǎng)站功能,如論壇發(fā)帖、商品評(píng)論、用戶私信等。

它是最危險(xiǎn)的一種跨站腳本,相比反射型XSS和DOM型XSS具有更高的隱蔽性,所以危害更大,因?yàn)?strong>它不需要用戶手動(dòng)觸發(fā)。任何允許用戶存儲(chǔ)數(shù)據(jù)的web程序都可能存在存儲(chǔ)型XSS漏洞,當(dāng)攻擊者提交一段XSS代碼后,被服務(wù)器端接收并存儲(chǔ),當(dāng)所有瀏覽者訪問某個(gè)頁面時(shí)都會(huì)被XSS。


2. 反射型


反射型 XSS 的攻擊步驟:

  1. 攻擊者構(gòu)造出特殊的 URL,其中包含惡意代碼。

  2. 用戶打開帶有惡意代碼的 URL 時(shí),網(wǎng)站服務(wù)端將惡意代碼從 URL 中取出,拼接在 HTML 中返回給瀏覽器。

  3. 用戶瀏覽器接收到響應(yīng)后解析執(zhí)行,混在其中的惡意代碼也被執(zhí)行。

  4. 惡意代碼竊取用戶數(shù)據(jù)并發(fā)送到攻擊者的網(wǎng)站,或者冒充用戶的行為,調(diào)用目標(biāo)網(wǎng)站接口執(zhí)行攻擊者指定的操作。

反射型 XSS 跟存儲(chǔ)型 XSS 的區(qū)別是:存儲(chǔ)型 XSS 的惡意代碼存在數(shù)據(jù)庫里,反射型 XSS 的惡意代碼存在 URL 里。

反射型 XSS (也被稱為非持久性XSS)漏洞常見于通過 URL 傳遞參數(shù)的功能,如網(wǎng)站搜索、跳轉(zhuǎn)等。

由于需要用戶主動(dòng)打開惡意的 URL 才能生效,攻擊者往往會(huì)結(jié)合多種手段誘導(dǎo)用戶點(diǎn)擊。

POST 的內(nèi)容也可以觸發(fā)反射型 XSS,只不過其觸發(fā)條件比較苛刻(需要構(gòu)造表單提交頁面,并引導(dǎo)用戶點(diǎn)擊),所以非常少見。


3. DOM型

DOM 型 XSS 的攻擊步驟:

  1. 攻擊者構(gòu)造出特殊的 URL,其中包含惡意代碼。

  2. 用戶打開帶有惡意代碼的 URL。

  3. 用戶瀏覽器接收到響應(yīng)后解析執(zhí)行,前端 JavaScript 取出 URL 中的惡意代碼并執(zhí)行。

  4. 惡意代碼竊取用戶數(shù)據(jù)并發(fā)送到攻擊者的網(wǎng)站,或者冒充用戶的行為,調(diào)用目標(biāo)網(wǎng)站接口執(zhí)行攻擊者指定的操作。

DOM 型 XSS 跟前兩種 XSS 的區(qū)別:DOM 型 XSS 攻擊中,取出和執(zhí)行惡意代碼由瀏覽器端完成,屬于前端 JavaScript 自身的安全漏洞,而其他兩種 XSS 都屬于服務(wù)端的安全漏洞。

注意:
DOM通常代表在html、xhtml和xml中的對象,使用DOM可以允許程序和腳本動(dòng)態(tài)的訪問和更新文檔的內(nèi)容、結(jié)構(gòu)和樣式。它不需要服務(wù)器解析響應(yīng)的直接參與,觸發(fā)XSS靠的是瀏覽器端的DOM解析,所以防范DOM型XSS完全就是前端的責(zé)任,必須注意!!!。


說了這么多,那么該如何防范呢?

方法大致上可分為兩種

  1. 針對注入的JS代碼

  2. 針對任何可輸入點(diǎn)

第一種方法需要分析xss攻擊的目的,大部分都是拿用戶數(shù)據(jù),因此常見的是設(shè)置cookie的httpOnly為true,此時(shí)使用js無法獲取cookie。

第二種方法最為常見,主要有以下這些方法:

① 對任何可以輸入的地方都進(jìn)行過濾操作(前后端均需要)

② 對特殊符號(hào)進(jìn)行轉(zhuǎn)義,比如:

③ 黑白名單過濾,白名單是只獲取dom本身就有的屬性,黑名單相反,過濾掉不需要的標(biāo)簽。

④ 針對存儲(chǔ)型XSS攻擊的服務(wù)器傳回的html拼接問題

  • 可以使用純前端(前后端分離),比如使用vue,極大部分情況下是不會(huì)使用到v-html指令的。并且vue在生成DOM的時(shí)候是會(huì)判斷節(jié)點(diǎn)類型并通知瀏覽器要如何渲染的,比如tag = text的渲染成TextNode、tag = div渲染成Node,而非瀏覽器自己判斷是什么節(jié)點(diǎn)。

  • 對服務(wù)器傳回的數(shù)據(jù)進(jìn)行轉(zhuǎn)義等操作。

⑤ 針對DOM型XSS攻擊(前端)

需要特別注意一些會(huì)將字符串等轉(zhuǎn)換為別的并執(zhí)行的事件或方法,比如:eval、innerHTML、setTimeout、內(nèi)聯(lián)的onload、onclick等。


⑥ 設(shè)置CSP安全策略

除了針對數(shù)據(jù)源的嚴(yán)格過濾以外,CSP安全策略的限制也是主要的XSS防范手段之一,通過在頁面中設(shè)置允許加載的資源的來源,來嚴(yán)格限制頁面可加載的腳本以及圖片等資源,防止外部的腳本攻擊后注入其他腳本以及內(nèi)容。

CSP,內(nèi)容安全策略,是一種基于內(nèi)容的聲明式網(wǎng)絡(luò)應(yīng)用程序機(jī)制,對緩解內(nèi)容注入漏洞的危害非常有效。通過一系列指令告訴客戶端(如瀏覽器)被保護(hù)資源(如頁面)內(nèi)只允許加載和執(zhí)行指令集中限定的內(nèi)容,類似白名單機(jī)制,不滿足限定條件的資源和內(nèi)容將被客戶端阻斷或不被執(zhí)行??梢酝ㄟ^兩種方式設(shè)置CSP,一種是meta標(biāo)簽,一種是HTTP響應(yīng)頭Content-Security-Policy

這個(gè)可以百度下,我沒把握住。。

⑦ 設(shè)置響應(yīng)頭,由于兼容性問題,這里不詳細(xì)說(這個(gè)我也沒把握?。?/p>


2. CSRF(Cross-site request forgery)

中文翻譯過來就是跨站請求偽造,是一種挾制用戶在當(dāng)前已登錄的 Web 應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。如:攻擊者誘導(dǎo)受害者進(jìn)入第三方網(wǎng)站,在第三方網(wǎng)站中,向被攻擊網(wǎng)站發(fā)送跨站請求。利用受害者在被攻擊網(wǎng)站已經(jīng)獲取的注冊憑證,繞過后臺(tái)的用戶驗(yàn)證,達(dá)到冒充用戶對被攻擊的網(wǎng)站執(zhí)行某項(xiàng)操作的目的。


大佬的圖:

hyddd大佬的解釋圖

鏈接:https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html


從上圖可以看出,要完成一次CSRF攻擊,受害者必須依次完成兩個(gè)步驟:

  • 1.登錄受信任網(wǎng)站A,并在本地生成Cookie。

  • 2.在不登出A的情況下,訪問危險(xiǎn)網(wǎng)站B。

看到這里,你也許會(huì)說:“如果我不滿足以上兩個(gè)條件中的一個(gè),我就不會(huì)受到CSRF的攻擊”。是的,確實(shí)如此,但你不能保證以下情況不會(huì)發(fā)生:

  • 1.你不能保證你登錄了一個(gè)網(wǎng)站后,不再打開一個(gè)tab頁面并訪問另外的網(wǎng)站。

  • 2.你不能保證你關(guān)閉瀏覽器了后,你本地的Cookie立刻過期,你上次的會(huì)話已經(jīng)結(jié)束。(事實(shí)上,關(guān)閉瀏覽器不能結(jié)束一個(gè)會(huì)話,但大多數(shù)人都會(huì)錯(cuò)誤的認(rèn)為關(guān)閉瀏覽器就等于退出登錄/結(jié)束會(huì)話了......)

  • 3.上圖中所謂的攻擊網(wǎng)站,可能是一個(gè)存在其他漏洞的可信任的經(jīng)常被人訪問的網(wǎng)站。

CSRF的特點(diǎn)

  • 攻擊一般發(fā)起在第三方網(wǎng)站,而不是被攻擊的網(wǎng)站。被攻擊的網(wǎng)站無法防止攻擊發(fā)生。

  • 攻擊利用受害者在被攻擊網(wǎng)站的登錄憑證,冒充受害者提交操作;而不是直接竊取數(shù)據(jù)。

  • 整個(gè)過程攻擊者并不能獲取到受害者的登錄憑證,僅僅是“冒用”。

  • 跨站請求可以用各種方式:圖片URL、超鏈接、CORS、Form提交等等。部分請求方式可以直接嵌入在第三方論壇、文章中,難以進(jìn)行追蹤。

CSRF通常是跨域的,因?yàn)橥庥蛲ǔ8菀妆还粽哒瓶亍5侨绻居蛳掠腥菀妆焕玫墓δ?,比?strong>可以發(fā)圖和鏈接的論壇和評(píng)論區(qū),攻擊可以直接在本域下進(jìn)行,而且這種攻擊更加危險(xiǎn)。


那么該如何防范呢?


1.服務(wù)端進(jìn)行CSRF防御

  服務(wù)端的CSRF方式方法很多樣,但總的思想都是一致的,就是在客戶端頁面增加偽隨機(jī)數(shù)。

  (1).Cookie Hashing(所有表單都包含同一個(gè)偽隨機(jī)值):

  這可能是最簡單的解決方案了,因?yàn)楣粽卟荒塬@得第三方的Cookie(理論上),所以表單中的數(shù)據(jù)也就構(gòu)造失敗了:>

這個(gè)方法個(gè)人覺得已經(jīng)可以杜絕99%的CSRF攻擊了,那還有1%呢....由于用戶的Cookie很容易由于網(wǎng)站的XSS漏洞而被盜取,這就另外的1%。一般的攻擊者看到有需要算Hash值,基本都會(huì)放棄了,某些除外,所以如果需要100%的杜絕,這個(gè)不是最好的方法。
  (2).驗(yàn)證碼

  這個(gè)方案的思路是:每次的用戶提交都需要用戶在表單中填寫一個(gè)圖片上的隨機(jī)字符串,厄....這個(gè)方案可以完全解決CSRF,但個(gè)人覺得在易用性方面似乎不是太好,還有聽聞是驗(yàn)證碼圖片的使用涉及了一個(gè)被稱為MHTML的Bug,可能在某些版本的微軟IE中受影響。

  (3).One-Time Tokens(不同的表單包含一個(gè)不同的偽隨機(jī)值)

  在實(shí)現(xiàn)One-Time Tokens時(shí),需要注意一點(diǎn):就是“并行會(huì)話的兼容”。如果用戶在一個(gè)站點(diǎn)上同時(shí)打開了兩個(gè)不同的表單,CSRF保護(hù)措施不應(yīng)該影響到他對任何表單的提交??紤]一下如果每次表單被裝入時(shí)站點(diǎn)生成一個(gè)偽隨機(jī)值來覆蓋以前的偽隨機(jī)值將會(huì)發(fā)生什么情況:用戶只能成功地提交他最后打開的表單,因?yàn)樗衅渌谋韱味己蟹欠ǖ膫坞S機(jī)值。必須小心操作以確保CSRF保護(hù)措施不會(huì)影響選項(xiàng)卡式的瀏覽或者利用多個(gè)瀏覽器窗口瀏覽一個(gè)站點(diǎn)。





整理自:

https://juejin.cn/post/6844903781704925191

https://segmentfault.com/a/1190000022678120

https://blog.csdn.net/weixin_34034261/article/details/85690647


前端面試八股文之安全性問題的評(píng)論 (共 條)

分享到微博請遵守國家法律
思南县| 思南县| 格尔木市| 揭西县| 当阳市| 永寿县| 怀来县| 穆棱市| 砀山县| 宁德市| 新乡市| 安康市| 福清市| 来宾市| 厦门市| 和静县| 曲水县| 聊城市| 咸阳市| 金沙县| 天长市| 茂名市| 遂溪县| 黄冈市| 全州县| 榆树市| 隆林| 巨鹿县| 贵阳市| 桂东县| 白山市| 宁南县| 惠水县| 玉龙| 云霄县| 长岛县| 杂多县| 石城县| 台北县| 乌海市| 隆安县|