筆記整理

OWASP 10及其防護手段

 

 

1. SQL注入,

使用參數化查詢語句(參數化預編譯),數據庫不會將參數中的內容視爲sql語句的一部分來處理,而是在sql語句外完成編譯後,才套用參數運行,所以就算含有惡意語句,因爲已經被編譯完成,就不會被數據庫所運行javascript

2.失效的驗證與鏈接管理

攻擊者利用網站中的身份認證缺陷獲取高權限並進行攻擊應用服務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計算時間解決計算機存儲壓力數據庫

3.敏感數據泄露

主要是經過掃描應用程序獲取到的敏感數據express

按期對目錄進行掃描,給相關網站目錄賦權安全

4.XML外部實體注入

當應用程序解析了外部實體的應用,攻擊者傳遞包含惡意的xml代碼的文件,讀取指定的服務器資源服務器

防禦:禁止外部實體的注入cookie

5.無效的訪問控制

沒有檢查身份,直接致使攻擊者繞過權限直接訪問

垂直越權:對身份參數值使用白名單的方式,增長權限的檢查

水平越權:對身份參數值使用白名單的方式,增長權限的檢查

6.安全配置錯誤

攻擊者利用錯誤配置,獲取敏感數據或者提高權限

目錄遍歷、debug模式、文件上傳校驗、備份文件、數據庫文件

7.跨站腳本攻擊

應用程序未對輸入字符進行校驗和過濾,致使用戶輸入的數據被看成代碼執行

結果:獲取用戶的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(含)以前有效)

使用白名單機制,過濾或者替換非法字符

8.不安全的反序列化漏洞

攻擊者利用應用程序反序列化功能,反序列化惡意對象攻擊應用程序

危害:可致使遠程代碼執行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();

    }

 

}

 

9.使用含有已知漏洞的組件

利用應用程序技術棧中的框架、庫、工具爆出的漏洞進行攻擊,獲取高權限或敏感數據

及時更新、修復組件漏洞,移除再也不使用的依賴組件

10.日誌記錄和監控不足致使的風險

對於日誌記錄的監控不足,形成攻擊者攻擊系統、應用、盜取數據等操做沒法被追查

啓用日誌監控、告警機制

OSI/TCP框架

相關文章
相關標籤/搜索