天天看點

詳解程式員常用的3大Web安全漏洞防禦解決方案:XSS、CSRF及SQL注入一 常見的Web安全問題二 XSS漏洞三 CSRF攻擊(跨站點請求僞造)

随着網際網路的普及,網絡安全變得越來越重要,程式員需要掌握最基本的web安全防範,下面列舉一些常見的安全漏洞和對應的防禦措施。

詳解程式員常用的3大Web安全漏洞防禦解決方案:XSS、CSRF及SQL注入一 常見的Web安全問題二 XSS漏洞三 CSRF攻擊(跨站點請求僞造)

一 常見的Web安全問題

1.前端安全

XSS 漏洞

CSRF 漏洞

2.後端安全

SQL 注入漏洞

詳解程式員常用的3大Web安全漏洞防禦解決方案:XSS、CSRF及SQL注入一 常見的Web安全問題二 XSS漏洞三 CSRF攻擊(跨站點請求僞造)

二 XSS漏洞

1.XSS簡介

跨站腳本(cross site script)簡稱為XSS,是一種經常出現在web應用中的計算機安全漏洞,也是web中最主流的攻擊方式。XSS是指惡意攻擊者利用網站沒有對使用者送出資料進行轉義處理或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去,使别的使用者通路都會執行相應的嵌入代碼。

2.XSS攻擊的危害

盜取使用者資料,比如:登入帳号、網銀帳号等;

利用使用者身份,讀取、篡改、添加、删除資料等;

盜竊重要的具有商業價值的資料;

非法轉賬;

強制發送電子郵件;

網站挂馬;

控制受害者機器向其它網站發起攻擊。

3.防止XSS解決方案

XSS的根源主要是沒完全過濾用戶端送出的資料 ,是以重點是要過濾使用者送出的資訊。

将重要的cookie标記為http only, 這樣的話js 中的document.cookie語句就不能擷取到cookie了.

隻允許使用者輸入我們期望的資料。 例如:age使用者年齡隻允許使用者輸入數字,而數字之外的字元都過濾掉。

對資料進行Html Encode 處理: 使用者将資料送出上來的時候進行HTML編碼,将相應的符号轉換為實體名稱再進行下一步的處理。

過濾或移除特殊的Html标簽, 例如:過濾js事件的标簽。例如 “onclick=”, “onfocus” 等等。

三 CSRF攻擊(跨站點請求僞造)

1.CSRF簡介

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

XSS主要是利用站點内的信任使用者,而CSRF則通過僞裝來自受信任使用者的請求,來利用受信任的網站。與XSS攻擊相比,CSRF更具危險性。

2.CSRF攻擊的危害

主要的危害來自于,攻擊者盜用使用者身份,發送惡意請求。比如:模拟使用者發送郵件,發消息,以及支付、轉賬等。

3.防止CSRF的解決方案

  • 重要資料互動采用POST進行接收,當然是用POST也不是萬能的,僞造一個form表單即可破解。
  • 使用驗證碼,隻要是涉及到資料互動就先進行驗證碼驗證,這個方法可以完全解決CSRF。但是出于使用者體驗考慮,網站不能給所有的操作都加上驗證碼。是以驗證碼隻能作為一種輔助手段,不能作為主要解決方案。
  • 驗證HTTP Referer字段,該字段記錄了此次HTTP請求的來源位址,最常見的應用是圖檔防盜鍊。
  • 為每個表單添加令牌token并驗證。

四 SQL注入漏洞

詳解程式員常用的3大Web安全漏洞防禦解決方案:XSS、CSRF及SQL注入一 常見的Web安全問題二 XSS漏洞三 CSRF攻擊(跨站點請求僞造)

1.簡介

SQL注入是比較常見的網絡攻擊方式之一,主要是通過把SQL指令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,實作無帳号登入,甚至篡改資料庫。

2.SQL注入的危害

  • 資料庫資訊洩漏:資料庫中存放的使用者的隐私資訊的洩露;
  • 網頁篡改:通過操作資料庫對特定網頁進行篡改;
  • 資料庫被惡意操作:資料庫伺服器被攻擊,資料庫的系統管理者帳戶被竄改;
  • 伺服器被遠端控制,被安裝後門;
  • 删除和修改資料庫表資訊。

3.SQL注入的方式

  • 通常情況下,SQL注入的位置包括:
  • 表單送出,主要是POST請求,也包括GET請求;
  • URL參數送出,主要為GET請求參數;
  • Cookie參數送出;
  • HTTP請求頭部的一些可修改的值,比如Referer、User_Agent等。

舉一個簡單的例子,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注入。

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

  • 對使用者的輸入進行校驗,使用正規表達式過濾傳入的參數;
  • 使用參數化語句,不要拼接sql,也可以使用安全的存儲過程;
  • 不要使用管理者權限的資料庫連接配接,為每個應用使用權限有限的資料庫連接配接;
  • 檢查資料存儲類型;
  • 重要的資訊一定要加密。

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

-----------------------------------end--------------------------------------

【mikechen優知】往期博文:

碼了幾年代碼的程式員,有一定的開發經驗,應該如何提升自己? 分布式消息系列:詳解RocketMQ的簡介與演進、架構設計、關鍵特性與應用場景 高并發架構系列:Kafka、RocketMQ、RabbitMQ的優劣勢比較 Java 面試題目最全集合1000+ 大放送,能答對70%就去BATJTMD試試~