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