天天看點

web攻防之SQL注入、XSS、CSRF

1.SQL注入

SQL注入式攻擊,就是攻擊者把SQL指令插入到Web表單的輸入域或頁面請求的查詢字元串,欺騙伺服器執行惡意的SQL指令。 攻擊者通過在應用程式預先定義好的SQL語句結尾加上額外的SQL語句元素,欺騙資料庫伺服器執行非授權的查詢,篡改指令。

  它能夠輕易的繞過防火牆直接通路資料庫,甚至能夠獲得資料庫所在的伺服器的系統權限。在Web應用漏洞中,SQL Injection 漏洞的風險要高過其他所有的漏洞。

  

發現注入點簡單辦法

1).尋找帶有查詢字元串的url的網頁(例如,查詢那些在URL裡帶有”id=” 的URL)。

2.向這個網站發送一個請求,改變其中的id=語句,帶一個額外的單引号(例如:id=123’)

3.檢視傳回的内容,在其中查找“sql”,“statement”等關鍵字

4.錯誤消息是否表示發送到SQL伺服器的參數沒有被正确編碼果如此,那麼表示可對該網站進行SQL注入攻

如何防範SQL注入攻擊

一個常見的錯誤是,假如你使用了存儲過程或ORM,你就完全不受SQL注入攻擊之害了。這是不正确的,你還是需要确定在給存儲過程傳遞資料時你很謹慎,或在用ORM來定制一個查詢時,你的做法是安全的。

  參數化查詢已被視為最有效的可防禦SQL注入攻擊的防禦方式。目前主流的ORM 架構都内置支援并且推薦使用這種方式進行持久層封裝。

  所謂的參數化查詢(Parameterized Query 或 Parameterized Statement)是指在設計與資料庫連結并通路資料時,在需要填入數值或資料的地方,使用參數 (Parameter) 來給值

 例:      
    SELECT * FROM myTable WHERE myID = @myID

    INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)或者INSERT INTO myTable (c1, c2, c3, c4) VALUES(?,?,?,?)
           

通過(?)指定占位符,當然在添加參數的時候,必須按照(c1, c2, c3, c4)的順序來添加,否則會出錯。

2.跨站腳本攻擊(XSS)

XSS 全稱(Cross Site Scripting) 跨站腳本攻擊, 是Web程式中最常見的漏洞。指攻擊者在網頁中嵌入用戶端腳本(例如JavaScript), 當使用者浏覽此網頁時,腳本就會在使用者的浏覽器上執行,進而達到攻擊者的目的. 比如擷取使用者的Cookie,導航到惡意網站,攜帶木馬等。

 攻擊原理

假如頁面有如下一個輸入框

  <input type="text" name="record" value="沙發">

  【沙發】是來自使用者的輸入,如果使用者輸入的是"onfocus="alert(document.cookie)

  那麼就會變成 

  <input type="text" name="address1" value="" onfocus="alert(document.cookie)">

   事件被觸發的時候嵌入的JavaScript代碼将會被執行

   攻擊的威力,取決于使用者輸入了什麼樣的腳本。
           

XSS分類

 1). 反射型XSS

  反射型XSS,又稱非持久型XSS。之是以稱為反射型XSS,則是因為這種攻擊方式的注入代碼是從目标伺服器通過錯誤資訊、搜尋結果等等方式“反射” 回來的。而稱為非持久型XSS,則是因為這種攻擊方式具有一次性。攻擊者通過電子郵件等方式将包含注入腳本的惡意連結發送給受害者,當受害者點選該連結 時,注入腳本被傳輸到目标伺服器上,然後伺服器将注入腳本“反射”到受害者的浏覽器上,進而在該浏覽器上執行了這段腳本。

 2).存儲型XSS

 存儲型XSS,又稱持久型XSS,他和反射型XSS最大的不同就是,攻擊腳本将被永久地存放在目标伺服器的資料庫和檔案中。這種攻擊多見于論壇,攻擊者在發帖的過程中,将惡意腳本連同正常資訊一起注入到文章的内容之中。随着文章被論壇伺服器存儲下來,惡意腳本也永久地被存放在論壇伺服器的後端存儲器中。當其它使用者浏覽這個被注入了惡意腳本的文章的時候,惡意腳本則會在他們的浏覽器中得到執行,進而受到了攻擊

Xss危害

  1).盜取cookie

  2).釣魚攻擊

  3).傳播惡意軟體

XSS的預防

  1. 輸入過濾

  對使用者的所有輸入資料進行檢測,比如過濾其中的“<”、“>”、“/”等可能導緻腳本注入的特殊字元,或者過濾“script”、 “javascript”等腳本關鍵字,或者對輸入資料的長度進行限制等等。

  2. 輸出編碼

  通過前面對XSS攻擊的分析,我們可以看到,之是以會産生XSS攻擊,就是因為Web應用程式将使用者的輸入直接嵌入到某個頁面當中,作為該頁面的 HTML代碼的一部分。是以,當Web應用程式将使用者的輸入資料輸出到目标頁面中時,隻要用HtmlEncoder等工具先對這些資料進行編碼, 然後再輸出到目标頁面中。這樣,如果使用者輸入一些HTML的腳本,也會被當成普通的文字,而不會成為目标頁面HTML代碼的一部分得到執行。

  3. Cookie防盜

  利用XSS攻擊,攻擊者可以很友善地竊取到合法使用者的Cookie資訊。是以,對于Cookie,我們可以采取以下的措施。首先,我們要盡可能地 避免在Cookie中洩露隐私,如使用者名、密碼等;其次,我們可以将Cookie資訊利用MD5等Hash算法進行多次散列後存放;再次,為了防止重放攻 擊,我們也可以将Cookie和IP進行綁定,這樣也可以阻止攻擊者冒充正常使用者的身份。

3. CSRF攻擊

CSRF(Cross-site request forgery),中文名稱:跨站請求僞造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。

你這可以這麼了解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發送惡意請求。

原理

  網站A :為惡意網站。

  網站B :使用者已登入的網站。

  當使用者通路A站時,A站 私自通路B站的操作連結,模拟使用者操作。

  假設B站有一個删除評論的連結:http://b.com/comment/?type=delete&id=0001

 CSRF 防禦

 

1.驗證碼

  驗證碼不單單用來防止注冊機的暴力破解, 還可以有效防止CSRF的攻擊。驗證碼算是對抗CSRF攻擊最簡潔有效的方法。但使用驗證碼的問題在于,不可能在使用者的所有操作上都需要輸入驗證碼.隻有 一些關鍵的操作,才能要求輸入驗證碼。

2.Token

 CSRF能攻擊成功,根本原因是:操作所帶的參數均被攻擊者猜測到。既然知道根本原因,我們就對症下藥,利用Token。當向伺服器傳參數時,帶 上Token。這個Token是一個随機值,并且由伺服器和使用者同時持有。當使用者送出表單時帶上Token值,伺服器就能驗證表單和session中的 Token是否一緻。

 

繼續閱讀