使用參數化查詢語句(參數化預編譯),數據庫不會將參數中的內容視爲sql語句的一部分來處理,而是在sql語句外完成編譯後,才套用參數運行,所以就算含有惡意語句,因爲已經被編譯完成,就不會被數據庫所運行javascript
攻擊者利用網站中的身份認證缺陷獲取高權限並進行攻擊應用服務html
防禦:網站應該具有良好的身份管理於權限控制,使用數據簽名的方式生成tonken(客戶端請求的token和服務端session中的token進行比對,相同則放行)java
爲token設置時效值算法
http://www.javashuo.com/article/p-pmqrabgg-cs.htmlsql
總結:cookie是一種數據存儲的功能,服務器爲了區分數據請求者,會生成一個session給客戶端,每次請求時,客戶端都會帶着這個session的值去請求,而客戶端中保存這個session值得方式,最經常使用得方式就是採用cookie得形式;而token也是一種身份校驗的實例,爲了解決session佔用大量服務端資源的狀況,故生成token值,token是採用md5加密算法+密鑰,對數據作簽名的方式來生辰token,因爲密鑰無人知道,就沒法被僞造,服務端不保存tonken值,每次客戶端請求時帶上token值,由服務器來解密,獲取其中的userid來校驗用戶身份,使用計算機的cpu計算時間解決計算機存儲壓力數據庫
主要是經過掃描應用程序獲取到的敏感數據express
按期對目錄進行掃描,給相關網站目錄賦權安全
當應用程序解析了外部實體的應用,攻擊者傳遞包含惡意的xml代碼的文件,讀取指定的服務器資源服務器
防禦:禁止外部實體的注入cookie
沒有檢查身份,直接致使攻擊者繞過權限直接訪問
垂直越權:對身份參數值使用白名單的方式,增長權限的檢查
水平越權:對身份參數值使用白名單的方式,增長權限的檢查
攻擊者利用錯誤配置,獲取敏感數據或者提高權限
目錄遍歷、debug模式、文件上傳校驗、備份文件、數據庫文件
應用程序未對輸入字符進行校驗和過濾,致使用戶輸入的數據被看成代碼執行
結果:獲取用戶的cookie
><script>alert(document.cookie)</script>='>
<script>alert(document.cookie)</script>">
<script>alert(document.cookie)</script>
<script>alert(document.cookie)</script>
<script>alert (vulnerable)</script>%3Cscript%3Ealert('XSS')%3C/script%3E
<script>alert('XSS')</script>
<img src="javascript:alert('XSS')">
<img src="http://888.888.com/999.png" onerror="alert('XSS')">
<div style="height:expression(alert('XSS'),1)"></div>(這個僅於IE7(含)以前有效)
使用白名單機制,過濾或者替換非法字符
攻擊者利用應用程序反序列化功能,反序列化惡意對象攻擊應用程序
危害:可致使遠程代碼執行rce
注入攻擊
越權
漏洞防禦:對數據對象簽名,並做完整檢查
隔離反序列化操做環境
序列化:將對象的狀態信息轉換爲字節序列的過程
反序列化:將字節流還原成對象
應用場景:在服務器重啓時,有些會話可能還會在進行相應的操做,這時候就須要使用序列化將session信息保存起來放在硬盤,服務器重啓後,又從新加載。在不少狀況下爲了減輕內存壓力會讓某些對象進行序列化,讓他們離開內存空間,入住物理硬盤,一邊減輕內存壓力
Java反序列化示例:
Java中的API實現
序列化:objectoutputstream類-àwriteobject()
(該方法對參數指定的obj對象進行序列化,把字節序列寫到一個目標輸出流中,按java的的標準約定是給一個文件一個.ser擴展名)
反序列化:objectinputstream類-àreadobject()
(該方法是從一個源輸入流中讀取字節序列,再把他們反序列化爲一個對象,並將其返回)
如下爲簡單測試代碼:
import java.io.*;
/*
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
*/
public class Java_Test{
public static void main(String args[]) throws Exception {
String obj = "ls ";
// 將序列化對象寫入文件object.txt中
FileOutputStream fos = new FileOutputStream("aa.ser");
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(obj);
os.close();
// 從文件object.txt中讀取數據
FileInputStream fis = new FileInputStream("aa.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
// 經過反序列化恢復對象obj
String obj2 = (String)ois.readObject();
System.out.println(obj2);
ois.close();
}
}
利用應用程序技術棧中的框架、庫、工具爆出的漏洞進行攻擊,獲取高權限或敏感數據
及時更新、修復組件漏洞,移除再也不使用的依賴組件
對於日誌記錄的監控不足,形成攻擊者攻擊系統、應用、盜取數據等操做沒法被追查
啓用日誌監控、告警機制
OSI/TCP框架