3大Web安全漏洞防御詳解:XSS、CSRF、以及SQL注入解決方案
隨著互聯(lián)網(wǎng)的普及,網(wǎng)絡(luò)安全變得越來(lái)越重要,程序員需要掌握最基本的web安全防范,下面列舉一些常見(jiàn)的安全漏洞和對(duì)應(yīng)的防御措施。
01
常見(jiàn)的Web安全問(wèn)題
1.前端安全
- XSS 漏洞
- CSRF 漏洞
2.后端安全
02
XSS漏洞
1.XSS簡(jiǎn)介
跨站腳本(cross site script)簡(jiǎn)稱(chēng)為XSS,是一種經(jīng)常出現(xiàn)在web應(yīng)用中的計(jì)算機(jī)安全漏洞,也是web中最主流的攻擊方式。
XSS是指惡意攻擊者利用網(wǎng)站沒(méi)有對(duì)用戶(hù)提交數(shù)據(jù)進(jìn)行轉(zhuǎn)義處理或者過(guò)濾不足的缺點(diǎn),進(jìn)而添加一些代碼,嵌入到web頁(yè)面中去,使別的用戶(hù)訪(fǎng)問(wèn)都會(huì)執(zhí)行相應(yīng)的嵌入代碼。
2.XSS攻擊的危害
1)盜取用戶(hù)資料,比如:登錄帳號(hào)、網(wǎng)銀帳號(hào)等
2)利用用戶(hù)身份,讀取、篡改、添加、刪除數(shù)據(jù)等
3)盜竊重要的具有商業(yè)價(jià)值的資料
4)非法轉(zhuǎn)賬
5)強(qiáng)制發(fā)送電子郵件
6)網(wǎng)站掛馬
7)控制受害者機(jī)器向其它網(wǎng)站發(fā)起攻擊
3.防止XSS解決方案
XSS的根源主要是沒(méi)完全過(guò)濾客戶(hù)端提交的數(shù)據(jù) ,所以重點(diǎn)是要過(guò)濾用戶(hù)提交的信息。
1)將重要的cookie標(biāo)記為http only, 這樣的話(huà)js 中的document.cookie語(yǔ)句就不能獲取到cookie了.
2)只允許用戶(hù)輸入我們期望的數(shù)據(jù)。 例如:age用戶(hù)年齡只允許用戶(hù)輸入數(shù)字,而數(shù)字之外的字符都過(guò)濾掉。
3)對(duì)數(shù)據(jù)進(jìn)行Html Encode 處理: 用戶(hù)將數(shù)據(jù)提交上來(lái)的時(shí)候進(jìn)行HTML編碼,將相應(yīng)的符號(hào)轉(zhuǎn)換為實(shí)體名稱(chēng)再進(jìn)行下一步的處理。
4)過(guò)濾或移除特殊的Html標(biāo)簽, 例如:
5)過(guò)濾js事件的標(biāo)簽。例如 "onclick=", "onfocus" 等等。
03
CSRF攻擊(跨站點(diǎn)請(qǐng)求偽造)
1.CSRF簡(jiǎn)介
CSRF(Cross-site request forgery)跨站請(qǐng)求偽造,也被稱(chēng)為“One Click Attack”或者Session Riding,通??s寫(xiě)為CSRF或者XSRF,是一種對(duì)網(wǎng)站的惡意利用。
XSS主要是利用站點(diǎn)內(nèi)的信任用戶(hù),而CSRF則通過(guò)偽裝來(lái)自受信任用戶(hù)的請(qǐng)求,來(lái)利用受信任的網(wǎng)站。與XSS攻擊相比,CSRF更具危險(xiǎn)性。
2.CSRF攻擊的危害
主要的危害來(lái)自于,攻擊者盜用用戶(hù)身份,發(fā)送惡意請(qǐng)求。比如:模擬用戶(hù)發(fā)送郵件,發(fā)消息,以及支付、轉(zhuǎn)賬等。
3.防止CSRF的解決方案
1)重要數(shù)據(jù)交互采用POST進(jìn)行接收,當(dāng)然是用POST也不是萬(wàn)能的,偽造一個(gè)form表單即可破解。
2)使用驗(yàn)證碼,只要是涉及到數(shù)據(jù)交互就先進(jìn)行驗(yàn)證碼驗(yàn)證,這個(gè)方法可以完全解決CSRF。但是出于用戶(hù)體驗(yàn)考慮,網(wǎng)站不能給所有的操作都加上驗(yàn)證碼。因此驗(yàn)證碼只能作為一種輔助手段,不能作為主要解決方案。
3)驗(yàn)證HTTP Referer字段,該字段記錄了此次HTTP請(qǐng)求的來(lái)源地址,最常見(jiàn)的應(yīng)用是圖片防盜鏈。
4)為每個(gè)表單添加令牌token并驗(yàn)證。
04
SQL注入漏洞
1.簡(jiǎn)介
SQL注入是比較常見(jiàn)的網(wǎng)絡(luò)攻擊方式之一,主要是通過(guò)把SQL命令插入到Web表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢(xún)字符串,實(shí)現(xiàn)無(wú)帳號(hào)登錄,甚至篡改數(shù)據(jù)庫(kù)。
2.SQL注入的危害
- 數(shù)據(jù)庫(kù)信息泄漏:數(shù)據(jù)庫(kù)中存放的用戶(hù)的隱私信息的泄露
- 網(wǎng)頁(yè)篡改:通過(guò)操作數(shù)據(jù)庫(kù)對(duì)特定網(wǎng)頁(yè)進(jìn)行篡改
- 數(shù)據(jù)庫(kù)被惡意操作:數(shù)據(jù)庫(kù)服務(wù)器被攻擊,數(shù)據(jù)庫(kù)的系統(tǒng)管理員帳戶(hù)被竄改
- 服務(wù)器被遠(yuǎn)程控制,被安裝后門(mén)
- 刪除和修改數(shù)據(jù)庫(kù)表信息
3.SQL注入的方式
通常情況下,SQL注入的位置包括:
(1)表單提交,主要是POST請(qǐng)求,也包括GET請(qǐng)求;
(2)URL參數(shù)提交,主要為GET請(qǐng)求參數(shù);
(3)Cookie參數(shù)提交;
(4)HTTP請(qǐng)求頭部的一些可修改的值,比如Referer、User_Agent等;
4.簡(jiǎn)單舉例
舉一個(gè)簡(jiǎn)單的例子,select * from user where id=100 ,表示查詢(xún)id為100的用戶(hù)信息,如果id=100變?yōu)?id=100 or 2=2,sql將變?yōu)椋簊elect * from user where id=100 or 2=2,將把所有user表的信息查詢(xún)出來(lái),這就是典型的sql注入。
5.防止SQL注入的解決方案
1)對(duì)用戶(hù)的輸入進(jìn)行校驗(yàn),使用正則表達(dá)式過(guò)濾傳入的參數(shù)
2)使用參數(shù)化語(yǔ)句,不要拼接sql,也可以使用安全的存儲(chǔ)過(guò)程
3)不要使用管理員權(quán)限的數(shù)據(jù)庫(kù)連接,為每個(gè)應(yīng)用使用權(quán)限有限的數(shù)據(jù)庫(kù)連接
4)檢查數(shù)據(jù)存儲(chǔ)類(lèi)型
5)重要的信息一定要加密
總之就是既要做好過(guò)濾與編碼并使用參數(shù)化語(yǔ)句,也要把重要的信息進(jìn)行加密處理,這樣SQL注入漏洞才能更好的解決。