圖文詳解程序員常用的3大Web安全漏洞防御解決方案:XSS、CSRF及SQL注入

隨著互聯(lián)網(wǎng)的普及,網(wǎng)絡(luò)安全變得越來越重要,程序員需要掌握最基本的web安全防范,下面列舉一些常見的安全漏洞和對應(yīng)的防御措施。


一? 常見的Web安全問題


1.前端安全

XSS 漏洞

CSRF 漏洞


2.后端安全

SQL 注入漏洞


二? XSS漏洞


1.XSS簡介

跨站腳本(cross site script)簡稱為XSS,是一種經(jīng)常出現(xiàn)在web應(yīng)用中的計算機(jī)安全漏洞,也是web中最主流的攻擊方式。XSS是指惡意攻擊者利用網(wǎng)站沒有對用戶提交數(shù)據(jù)進(jìn)行轉(zhuǎn)義處理或者過濾不足的缺點(diǎn),進(jìn)而添加一些代碼,嵌入到web頁面中去,使別的用戶訪問都會執(zhí)行相應(yīng)的嵌入代碼。


2.XSS攻擊的危害

盜取用戶資料,比如:登錄帳號、網(wǎng)銀帳號等;

利用用戶身份,讀取、篡改、添加、刪除數(shù)據(jù)等;

盜竊重要的具有商業(yè)價值的資料;

非法轉(zhuǎn)賬;

強(qiáng)制發(fā)送電子郵件;

網(wǎng)站掛馬;

控制受害者機(jī)器向其它網(wǎng)站發(fā)起攻擊。


3.防止XSS解決方案

XSS的根源主要是沒完全過濾客戶端提交的數(shù)據(jù) ,所以重點(diǎn)是要過濾用戶提交的信息。

將重要的cookie標(biāo)記為http only, 這樣的話js 中的document.cookie語句就不能獲取到cookie了.

只允許用戶輸入我們期望的數(shù)據(jù)。 例如:age用戶年齡只允許用戶輸入數(shù)字,而數(shù)字之外的字符都過濾掉。

對數(shù)據(jù)進(jìn)行Html Encode 處理: 用戶將數(shù)據(jù)提交上來的時候進(jìn)行HTML編碼,將相應(yīng)的符號轉(zhuǎn)換為實(shí)體名稱再進(jìn)行下一步的處理。

過濾或移除特殊的Html標(biāo)簽, 例如:過濾js事件的標(biāo)簽。例如 “onclick=”, “onfocus” 等等。


三 CSRF攻擊(跨站點(diǎn)請求偽造)

1.CSRF簡介

CSRF(Cross-site request forgery)跨站請求偽造,也被稱為“One Click Attack”或者Session Riding,通??s寫為CSRF或者XSRF,是一種對網(wǎng)站的惡意利用。

XSS主要是利用站點(diǎn)內(nèi)的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求,來利用受信任的網(wǎng)站。與XSS攻擊相比,CSRF更具危險性。


2.CSRF攻擊的危害

主要的危害來自于,攻擊者盜用用戶身份,發(fā)送惡意請求。比如:模擬用戶發(fā)送郵件,發(fā)消息,以及支付、轉(zhuǎn)賬等。


3.防止CSRF的解決方案

重要數(shù)據(jù)交互采用POST進(jìn)行接收,當(dāng)然是用POST也不是萬能的,偽造一個form表單即可破解。

使用驗證碼,只要是涉及到數(shù)據(jù)交互就先進(jìn)行驗證碼驗證,這個方法可以完全解決CSRF。但是出于用戶體驗考慮,網(wǎng)站不能給所有的操作都加上驗證碼。因此驗證碼只能作為一種輔助手段,不能作為主要解決方案。

驗證HTTP Referer字段,該字段記錄了此次HTTP請求的來源地址,最常見的應(yīng)用是圖片防盜鏈。

為每個表單添加令牌token并驗證。


四? SQL注入漏洞


1.簡介

SQL注入是比較常見的網(wǎng)絡(luò)攻擊方式之一,主要是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,實(shí)現(xiàn)無帳號登錄,甚至篡改數(shù)據(jù)庫。


2.SQL注入的危害

數(shù)據(jù)庫信息泄漏:數(shù)據(jù)庫中存放的用戶的隱私信息的泄露;

網(wǎng)頁篡改:通過操作數(shù)據(jù)庫對特定網(wǎng)頁進(jìn)行篡改;

數(shù)據(jù)庫被惡意操作:數(shù)據(jù)庫服務(wù)器被攻擊,數(shù)據(jù)庫的系統(tǒng)管理員帳戶被竄改;

服務(wù)器被遠(yuǎn)程控制,被安裝后門;

刪除和修改數(shù)據(jù)庫表信息。


3.SQL注入的方式

通常情況下,SQL注入的位置包括:

表單提交,主要是POST請求,也包括GET請求;

URL參數(shù)提交,主要為GET請求參數(shù);

Cookie參數(shù)提交;

HTTP請求頭部的一些可修改的值,比如Referer、User_Agent等。

舉一個簡單的例子,select * from user where id=100 ,表示查詢id為100的用戶信息,如果id=100變?yōu)?id=100 or 2=2,sql將變?yōu)椋簊elect * from user where id=100 or 2=2,將把所有user表的信息查詢出來,這就是典型的sql注入。


4.防止SQL注入的解決方案

對用戶的輸入進(jìn)行校驗,使用正則表達(dá)式過濾傳入的參數(shù);

使用參數(shù)化語句,不要拼接sql,也可以使用安全的存儲過程;

不要使用管理員權(quán)限的數(shù)據(jù)庫連接,為每個應(yīng)用使用權(quán)限有限的數(shù)據(jù)庫連接;

檢查數(shù)據(jù)存儲類型;

重要的信息一定要加密。


總之就是既要做好過濾與編碼并使用參數(shù)化語句,也要把重要的信息進(jìn)行加密處理,這樣SQL注入漏洞才能更好的解決。


更多高并發(fā)架構(gòu)系列連載,內(nèi)容包括:java高并發(fā)、SOA、分布式集群、多線程、Redis、數(shù)據(jù)庫分庫分表、負(fù)載均衡等。

覺得不錯請點(diǎn)贊支持,歡迎留言或進(jìn)我的個人群179961551領(lǐng)取【架構(gòu)資料專題目合集90期】、【BATJTMD大廠JAVA面試真題1000+】,本群專用于學(xué)習(xí)交流技術(shù)、分享面試機(jī)會,拒絕廣告,我也會在群內(nèi)不定期答題、探討。


歡迎轉(zhuǎn)載,但務(wù)必原文顯示、文章頭區(qū)注明出處及原文鏈接!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容