質(zhì)量非常不錯!
當(dāng)你的評論列表被用戶瀏覽時(shí), 直接從服務(wù)端取出,回填到HTML響應(yīng)中:
- 質(zhì)量非常不錯!
-
那么瀏覽器會加載執(zhí)行惡意腳本
danger.com/spread.js
, 在惡意腳本中利用用戶的登錄狀態(tài)發(fā)更多的帶有惡意評論的URL, 誘導(dǎo)更多人點(diǎn)擊,層層傳播,放大攻擊范圍。這個案例就是一個典型的存儲型XSS攻擊。再來看一個反射型攻擊案例:
某天小范開發(fā)了一個搜索頁面,通過用戶輸入搜索內(nèi)容,展示相應(yīng)的數(shù)據(jù):
http://localhost:8080/helloController/search?name=
http://localhost:8080/helloController/search?name=
http://localhost:8080/helloController/search?name=點(diǎn)我
有時(shí)攻擊者會偽造一個圖片,讓你點(diǎn)擊后鏈接跳轉(zhuǎn)URL。
對于這種攻擊方式來說,如果用戶使用的是Chrome 瀏覽器的話,瀏覽器已經(jīng)幫助用戶做了防御攻擊。但是我們也不能說就不防御了,因?yàn)闊o法保證用戶都是用有防御攻擊的瀏覽器。
XSS攻擊如何進(jìn)行防范
我們講了這么XSS的原理和危害,那么我們在日常開發(fā)當(dāng)中到底該如何預(yù)防呢?
1.輸入輸出過濾
一切
用戶輸入
皆不可信,在輸出時(shí)進(jìn)行驗(yàn)證,一般做法是將 ‘ ” < > & 這些個危險(xiǎn)字符進(jìn)行轉(zhuǎn)義。const?signs?=?{
‘&’:?‘&’,
‘<’:?‘<’,
‘>’:?‘>’,
‘"’:?‘"’,
“'”:?‘'’
}
const?signReg?=?/[&<>"']/g
function?escape(string)?{
return?(string?&&?reUnescapedHtml.test(string))
??string.replace(reUnescapedHtml,?(chr)?=>htmlEscapes[chr])
:?string
}
通過轉(zhuǎn)義
<script></script>
將被轉(zhuǎn)義成<script></script>
;對于URL地址的轉(zhuǎn)義可以使用
encodeURI
,當(dāng)你需要編碼URL中的參數(shù)的時(shí)候,那么encodeURIComponent
是最好方法。上面對字符進(jìn)行轉(zhuǎn)義的方式很明顯并不適用于所有場景,比如富文本,這樣會將需要的格式都過濾掉。因?yàn)镠TML標(biāo)簽種類繁多,基于黑名單的過濾方法考慮的并不全面,所以我們可以根據(jù)白名單過濾HTML, 可以借助
xss.js
來完成://?瀏覽器
使用:
filterXSS('
XSS?Demo
Whitelist
')輸出結(jié)果:
XSS?Demo
<script?type="text/javascript">alert(/xss/);</script>Whitelist
如果后端直接將字符串存入數(shù)據(jù)庫也是不妥的,后端也必須做處理,因?yàn)榘l(fā)送到后端的內(nèi)容還可以通過其他方式, 前端處理并不能保障安全。
2. Cookie 的 HttpOnly
當(dāng)用戶的登錄憑證存儲于服務(wù)器的
session
中,而在瀏覽器中是以cookie
的形式存儲的。很多XSS攻擊目標(biāo)都是竊取用戶cookie
偽造身份認(rèn)證。可以通過在
cookie
中設(shè)置HttpOnly
屬性,js腳本將無法讀取到 cookie 信息。ctx.cookies.set(name,?value,?{
httpOnly:?true?//?默認(rèn)為?true
})
3. CSP(內(nèi)容安全策略)
CSP (Content Security Policy,內(nèi)容安全策略)是 W3C 提出的 ,本質(zhì)上就是白名單制度,開發(fā)者明確告訴瀏覽器哪些外部資源可以加載和執(zhí)行。它的實(shí)現(xiàn)和執(zhí)行全部由瀏覽器完成,我們只需提供配置。
CSP 大大增強(qiáng)了網(wǎng)頁的安全性。攻擊者即使發(fā)現(xiàn)了漏洞,也沒法注入腳本,除非還控制了一臺列入了白名單的可信主機(jī)。
兩種方法可以啟用 CSP:
-
一種是通過 HTTP 頭信息的
Content-Security-Policy
的字段 -
另一種是通過網(wǎng)頁的
<meta>
標(biāo)簽
方式1舉例
Content-Security-Policy:?default-src?‘self’
表示只允許加載本站資源
Content-Security-Policy:?default-src?https://demo.example.cn?https://demo.example2.cn;?object-src?‘none’
CSP 的值中,不同屬性以
;
隔開,同一屬性的多個值以空格隔開。上面例子的意思就是默認(rèn)允許讀取https://demo.example.cn
和https://cdn.example2.net
的資源,object-src
使用的相關(guān)資源無白名單,也就是完全不允許讀出。如果使用了不符合要求的資源,瀏覽器會給予攔截,給出下面提示:
Refused?to?execute?inline?script?because?it?violates?the?following?Content?Security?Policy?directive
我們也可以使用
meta
標(biāo)簽代替 HTTP 頭:<meta
http-equiv=“Content-Security-Policy”
content=“default-src?https://cdn.example.net;?child-src?‘none’;?object-src?‘none’”
/>
Content-Security-Policy
的常用選項(xiàng)有這些:-
default-src: 是 src 選項(xiàng)的默認(rèn)值,但不能覆蓋以下值:
base-uri
、form-action
、frame-ancestors
、plugin-types
、report-uri
、sandbox
-
base-uri:特別說一下
<base>
標(biāo)簽是因?yàn)楣侣崖劦奈业谝淮我姷健V付ㄓ糜谝粋€文檔中包含的所有相對 URL 的根 URL,一個文件只能有一個<base>
標(biāo)簽,用起來大概是這樣的:<base target="_top" >
。 -
connect-src: XHR、WebSockets 等連接使用的地址
-
font-src:字體文件來源
-
img-src:圖片地址
-
media-src:音視頻地址
-
object-src:Flash 相關(guān)
-
report-uri:出現(xiàn)報(bào)錯時(shí)提交到指定 uri,不能在 ?標(biāo)簽使用
-
style-src:樣式文件
CSRF 攻擊
除了上面說的XSS攻擊外,還有一種常見的攻擊方式:CSRF攻擊。
什么是CSRF攻擊
CSRF:跨站點(diǎn)請求偽造(Cross-Site Request Forgeries),也被稱為 one-click attack 或者 session riding。冒充用戶發(fā)起請求(在用戶不知情的情況下), 完成一些違背用戶意愿的事情(如修改用戶信息,刪除評論等)。
舉個例子,好友小A在銀行存有一筆錢,輸入用戶名密碼登錄銀行賬戶后,發(fā)送請求給
xiaofan
賬戶轉(zhuǎn)888:http://bank.example.com./withdraw?account=xiaoA&amount=888&for=xiaonfan
轉(zhuǎn)賬過程中, 小A不小心打開了一個新頁面,進(jìn)入了黑客(
xiaohei
)的網(wǎng)站,而黑客網(wǎng)站有如下html代碼:<img?src=http://bank.example.com./withdraw?account=xiaoA&amount=888&for=xiaohei?width=‘0’?height=‘0’>
這個模擬的img請求就會帶上小A的session值, 成功的將888轉(zhuǎn)到xiaohei的賬戶上。例子雖然是get,post請求提交表單同樣會被攻擊。
CSRF攻擊的特點(diǎn):
-
通常發(fā)生在第三方網(wǎng)站
-
攻擊者不能獲取cookie等信息,只是使用
如何防御
-
驗(yàn)證碼:強(qiáng)制用戶必須與應(yīng)用進(jìn)行交互,才能完成最終請求。此種方式能很好的遏制 CSRF,但是用戶體驗(yàn)相對差。
-
盡量使用 post ,限制 get 使用;上一個例子可見,get 太容易被拿來做 CSRF 攻擊,但是 post 也并不是萬無一失,攻擊者只需要構(gòu)造一個form就可以。
-
Referer check:請求來源限制,此種方法成本最低,但是并不能保證 100% 有效,因?yàn)榉?wù)器并不是什么時(shí)候都能取到 Referer,而且低版本的瀏覽器存在偽造 Referer 的風(fēng)險(xiǎn)。
-
token:token 驗(yàn)證的 CSRF 防御機(jī)制是公認(rèn)最合適的方案。
CSRF 與 XSS 區(qū)別
通常來說 CSRF 是由 XSS 實(shí)現(xiàn)的,CSRF 時(shí)常也被稱為 XSRF(CSRF 實(shí)現(xiàn)的方式還可以是直接通過命令行發(fā)起請求等)。
本質(zhì)上講,XSS 是代碼注入問題,CSRF 是 HTTP 問題。XSS 是內(nèi)容沒有過濾導(dǎo)致瀏覽器將攻擊者的輸入當(dāng)代碼執(zhí)行。CSRF 則是因?yàn)闉g覽器在發(fā)送 HTTP 請求時(shí)候自動帶上 cookie,而一般網(wǎng)站的 session 都存在 cookie里面。XSS 利用的是用戶對指定網(wǎng)站的信任,CSRF 利用的是網(wǎng)站對用戶網(wǎng)頁瀏覽器的信任。
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)前端工程師,想要提升技能,往往是自己摸索成長或者是報(bào)班學(xué)習(xí),但對于培訓(xùn)機(jī)構(gòu)動則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Web前端開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上前端開發(fā)知識點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會持續(xù)更新!
如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲?。。。▊渥ⅲ呵岸耍?/strong>
最后
javascript是前端必要掌握的真正算得上是編程語言的語言,學(xué)會靈活運(yùn)用javascript,將對以后學(xué)習(xí)工作有非常大的幫助。掌握它最重要的首先是學(xué)習(xí)好基礎(chǔ)知識,而后通過不斷的實(shí)戰(zhàn)來提升我們的編程技巧和邏輯思維。這一塊學(xué)習(xí)是持續(xù)的,直到我們真正掌握它并且能夠靈活運(yùn)用它。如果最開始學(xué)習(xí)一兩遍之后,發(fā)現(xiàn)暫時(shí)沒有提升的空間,我們可以暫時(shí)放一放。繼續(xù)下面的學(xué)習(xí),javascript貫穿我們前端工作中,在之后的學(xué)習(xí)實(shí)現(xiàn)里也會遇到和鍛煉到。真正學(xué)習(xí)起來并不難理解,關(guān)鍵是靈活運(yùn)用。
資料領(lǐng)取方式:點(diǎn)擊這里獲取前端全套學(xué)習(xí)資料
最后
javascript是前端必要掌握的真正算得上是編程語言的語言,學(xué)會靈活運(yùn)用javascript,將對以后學(xué)習(xí)工作有非常大的幫助。掌握它最重要的首先是學(xué)習(xí)好基礎(chǔ)知識,而后通過不斷的實(shí)戰(zhàn)來提升我們的編程技巧和邏輯思維。這一塊學(xué)習(xí)是持續(xù)的,直到我們真正掌握它并且能夠靈活運(yùn)用它。如果最開始學(xué)習(xí)一兩遍之后,發(fā)現(xiàn)暫時(shí)沒有提升的空間,我們可以暫時(shí)放一放。繼續(xù)下面的學(xué)習(xí),javascript貫穿我們前端工作中,在之后的學(xué)習(xí)實(shí)現(xiàn)里也會遇到和鍛煉到。真正學(xué)習(xí)起來并不難理解,關(guān)鍵是靈活運(yùn)用。
資料領(lǐng)取方式:點(diǎn)擊這里獲取前端全套學(xué)習(xí)資料
[外鏈圖片轉(zhuǎn)存中…(img-wHO5iSzF-1712593694796)]文章來源:http://www.zghlxwxcb.cn/news/detail-852466.html
[外鏈圖片轉(zhuǎn)存中…(img-dhDMzmow-1712593694796)]文章來源地址http://www.zghlxwxcb.cn/news/detail-852466.html
-
到了這里,關(guān)于你在項(xiàng)目中做過哪些安全防范措施?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!