? ? ? ?這段時間準(zhǔn)備復(fù)習(xí)一下前端知識,查漏補缺。不知道從哪里下手,畢竟自己在前端的領(lǐng)域里還只是小白,前端的知識領(lǐng)域可以說是浩如煙海也不過分。不過既然自己選擇了這條路,那么就堅持走下去吧。加油。
第一個復(fù)習(xí)的知識點,是前端的安全問題,這個問題是在工作中敲代碼經(jīng)常會拋擲腦后的問題,但是面試又幾乎必問的問題。
(1)xss攻擊
目前俺做的這些項目里還沒有受到過神馬攻擊,但是為了適應(yīng)現(xiàn)代化前端的成長需求,這方面的只是還是應(yīng)該具備的。
諸如:攻擊者輸入input框時,在里面填寫“javascript:"這樣的字符串,或者“<script></script>”標(biāo)簽之類的,發(fā)送給后臺后存儲到數(shù)據(jù)庫,然后呢,當(dāng)其他用戶進(jìn)來的時候,瀏覽器解析從服務(wù)器得來的代碼,瀏覽器會將惡意注入的代碼解析運行。產(chǎn)生的后果,就是會惡意執(zhí)行程序影響用戶體驗和竊取用戶數(shù)據(jù)等等。
預(yù)防的方法:
1.前端要根據(jù)業(yè)務(wù)需求進(jìn)行嚴(yán)格的驗證,比如要求email格式的input框就只能是email.
2.后臺coder對于前端發(fā)送過去的數(shù)據(jù)要進(jìn)行過濾和消炎之后再存入數(shù)據(jù)庫。
3.與業(yè)務(wù)有關(guān)的數(shù)據(jù),盡量不要在頁面中顯示,前端創(chuàng)建html靜態(tài)頁面,通過ajax調(diào)用api實現(xiàn)數(shù)據(jù)展示。前后端完全分離,不要用后臺代碼在頁面上直接調(diào)取數(shù)據(jù)。
前面三條是我們平時在開發(fā)中都能做到的,所以規(guī)范的開發(fā)本身就是預(yù)防xss攻擊的有效方式。
另外還有一點:
4.針對不同的業(yè)務(wù)規(guī)定,前端可以對不符合規(guī)范的字符串和特殊符號進(jìn)行過濾,>>>>>>這里使用escapeHTML()方法
(2)csrf攻擊
這個攻擊方式也是面試中常見的一個問題。
跨域請求偽造,意思就是用戶在自己想要訪問的網(wǎng)站上,比如自己的郵箱里面,點開一個黑客發(fā)送的惡意的鏈接,這個鏈接的頁面會有你點擊進(jìn)去之后就獲取你的cookie信息的惡意代碼,這幾行代碼其實很簡單,會將你的cookie值set到頁面的input中然后促發(fā)submit事件,將帶有你cookie值的信息發(fā)送到攻擊者哪里,攻擊者就可以通過你的個人信息逃過系統(tǒng)驗證訪問B網(wǎng)站。
預(yù)防:
根據(jù)業(yè)務(wù)需求,在交互中強制用戶輸入驗證碼
(3)SQL注入
在用戶攝入界面注入sql語句在服務(wù)器端運行,惡意攻擊服務(wù)器獲取用戶數(shù)據(jù)。
預(yù)防:
1.設(shè)置php.ini選項display_errors = off,防止php腳本出錯之后,在web頁面輸出敏感信息錯誤。
2.數(shù)據(jù)轉(zhuǎn)移,
3.增加黑名單或白名單驗證。
對于sql注入,這里前端要解決的是去除input的特殊字符,做好驗證。然后其他的交給后臺驗證。至于后臺的黑名單白名單驗證,目前我還不是很懂,過兩天看一看,然后再來補充。
(4)文件上傳漏洞
惡意上傳帶有腳本的文件,在服務(wù)器端運行。
預(yù)防:
1.前端需要驗證上傳文件是否是指定的類型后綴名。
2.后臺文件上傳目錄禁止執(zhí)行腳本解析。