注入攻擊-XSS攻擊-CSRF攻擊


1.注入攻擊

注入攻擊包括系統命令注入,SQL注入,NoSQL注入,ORM注入等

1.1攻擊原理

在編寫SQL語句時,如果直接將用戶傳入的數據作為參數使用字符串拼接的方式插入到SQL查詢中,那么攻擊者可以通過注入其他語句來執行攻擊操作,這些攻擊操作包括可以通過SQL語句做的任何事:獲取敏感數據、修改數據、刪除數據庫

1.2攻擊示例

cur = db.execute("SELECT * FROM students WHERE password='%s';" % password);

如果攻擊者傳入的password參數值為  'or 1=1 --  那么最終的被執行的SQL語句將變成:

SELECT * FROM students WHERE password='' or 1=1 --;'

這樣students表中的所有記錄全部查詢並返回,意味着所有記錄都被攻擊者竊取了

備注:在SQL中;用來結束一行語句。--用來注釋后面的語句

1.3主要防范方法

1)使用ORM可以一定程度避免SQL注入問題

2)驗證輸入類型,比如限制URL規則中的變量為整型

3)參數化查詢,在構造SQL語句中避免拼接字符串或字符串格式化(使用百分號或format方法)

cur = db.execute('SELECT * FROM students WHERE password=%s',password);

4)轉義特殊字符,比如引號、分號和橫線。使用參數化查詢時,各種接口庫會為我們做轉義工作


 

2.XSS攻擊(Cross-Site Scripting,跨站腳本,因為Cross有交叉的意思故為X,從而區分CSS)

XSS攻擊歷史悠久,最遠可以追溯到90年代,但至今仍然時危害范圍非常廣的攻擊方式。

2.1攻擊原理

XSS是注入攻擊的一種,攻擊者通過將代碼注入被攻擊者的網站中,用戶一旦訪問網頁就會執行被如注入的惡意腳本。XSS攻擊分為反射型XSS攻擊和存儲型XSS攻擊。

2.2攻擊示例

反射型XSS又稱非持久型XSS。例如如下代碼:

response = '<h1>Hello, %s!</h1>' % name;

如果惡意用戶輸入一段javascript代碼作為查詢參數name的值

http://example.com/hello?name=<script>alert('Attack!');</script>

客戶端接收的響應將變為下面的代碼

<h1>Hello, <script>alert('Attack!');</script>!</h1>

原本的展示標題就有了彈窗,所以可以通過這種方式執行任意JavaScript代碼,如:竊取用戶的cookie、重定向到釣魚網站、發送其他請求。

存儲型XSS也被稱為持久型XSS,這種類型XSS攻擊更常見,危害更大,它和非持久型XSS類似,不過它會把攻擊代碼存儲到數據庫中,任何訪問包含攻擊代碼的頁面都會殃及。例如:

某個網站通過表單接收用戶的留言,如果服務器接收數據后未經處理就存儲到數據庫中,那么用戶可以在留言中插入任意的javascripte代碼,例如:

<script>window.location.href="http://attacker.com";</script>

其他用戶一旦訪問到留言板頁面就會執行其中的javascript腳本,從而重定向到攻擊者寫入的站點。

2.3防范措施

1)HTML轉義,轉義后可以確保用戶輸入的內容在瀏覽器中作為文本顯示,而不是作為代碼解析。這里的轉義和python中的概念相同,把變量標記的內容標記為文本,具體來說,會把變量中與HTML相關的符號轉換為安全字符,以避免變量中包含影響頁面輸出的HTML標簽和惡意代碼。轉義后,文本中的特殊字符都會轉義成HTML實體,HTML轉義如&lt表示小於號<。

2)驗證用戶輸入


 

3.CSRF攻擊

CSRF(Cross Site Request Forgery,跨站請求偽造),又被稱為one-click attack 或者 session riding。

3.1攻擊原理

CSRF攻擊方式如下:

用戶登錄了A網站,認證信息保存在cookie中,當用戶訪問攻擊者創建的B網站時,攻擊者通過在B站發送一個偽造的請求提交到A網站服務器上,讓A網站服務器誤以為請求來自於自己的網站,於是執行相應的操作,該用戶信息就遭到了篡改。

3.2攻擊示例

3.3防范措施

1)正確使用HTTP方法

-GET方法:屬於安全方法,不會改變資源狀態,僅用於獲取資源,因此又被稱為冪等方法,頁面中所有可以通過鏈接發起的請求都屬於GET請求。

-POST方法:用於創建、修改和刪除資源。在HTML中使用form標簽創建表單並設置提交方法為POST,在提交時會創建POST請求。

2)CSRF令牌校驗

當處理非GET請求時,除了在表單中加入驗證碼,一般還可以在表單隱藏字段里和session變量(簽名cookie)中加入偽隨機數來防御CSRF攻擊,這個偽隨機數稱為CSRF令牌(token)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM