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轉義如<表示小於號<。
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)
