黑白箱弱點掃描 白箱: 又名為輔助邏輯驅動測試 (auxiliary and logic driven testing)、clear-box testing、open-box testing 在光譜上是黑箱測試的另一面,滲透測試者對source code以及相關架構設計文件有全部的存取權限 在大量可用的data中淘選過濾,目地在於找到潛在弱點,因此它是滲透測試中最耗時的一種 白箱滲透測試人員可以對static code進行分析 白箱測試可以手動執行,或借助於自動化工具掃出像是 SQL注入攻擊(SQL injection)、跨站腳本攻擊 (cross-site scripting)、緩衝區溢位 (buffer overflow) 等弱點。 以下是白箱測試中很重要的工具:source code analyzer, debuggers 另外 dynamic analysis tool 也很重要,可以找出static analysis可能會漏掉的弱點,像是目標系統錯誤配置造成的弱點 (misconfiguration of target systems) 白箱滲透測試提供了綜合的評估,包含程式的內部弱點與外部弱點 黑箱: 又稱為 DAST test (動態分析資安測試 dynamic analysis security testing) 黑箱測試對於找出這樣的弱點很有幫助:input/output驗證問題, 伺服器配置相關的錯誤等。 黑箱測試的目標是要模擬真實世界的情境,並找出系統在不同情境下的行爲,例如網路攻擊、惡意輸入、阻斷服務攻擊DoS。 黑箱測試可以手動操作執行,或透過像是port scanners、fuzzers、web scanners 等自動化工具探測系統弱點。 深透測試目的是為了識別並補強可能會被攻擊者利用的弱點,因此黑箱測試是比較理想的滲透測試方法,因為大多數攻擊者並不知道目標網路的內部行為。
跟黑箱測試相反的則是白箱測試,測試人員有目標系統的完整資訊。
而灰箱測試則是提供測試人員有關目標系統『有限的』資訊,灰箱測試所模擬的資訊瞭解程度是「駭客透過調查與系統偵查足跡(footprinting)的方式,長期使用目標系統所能得到資訊」。
參考資料 黑箱、灰箱、白箱滲透測試是什麼
以黑箱測試改進應用程式的安全性
白箱資安測試與黑箱測試的異同
Kafka Broker Kafka broker (9092) is the first server that users interact with, it listens to some TCP connection. There are two pieces of abstractions — producer and consumer. 消費者與生產者的抽象概念
Topic: 資料邏輯分層 logical partitioning of data
Kafka broker(9092) [Topic A] Producer <---> [Topic B] <---> Consumer 假設現在 Kafka broker 裡面有個 Users Topic,而生產者發佈 John 進去 Users topic,當生產者持續發佈東西進 Users Topic,這個 Topic 就會越來越肥大
消費者在從 Users Topic 拉訊息 (pull information) 下來,
當資料表記有百萬筆資料,會採用sharding 將資料分成不同 database,而Kafka借用了這種技術,將Users Topic 分成了 Partition 1 (A - M) 與 Partition 2 (N-Z)。
Docker Note docker ps
list running containers
docker stop <container_id>
stops the container
docker start <container_id>
starts stopped container
docker ps -a
lists running and stopped container
docker run <image_name>:
pulls image and starts container
(docker pull + docker start in one command)
[CONTAINER Port vs HOST Port]
+ Multiple containers can run on your host machine
+ Your laptop has only certain ports available
使用 JUnit & Mockito 測試 Java 程式 Mockito — 本來以為這跟薄荷飲料mochito同音,實際要唸成 /mɑkiːtoʊ/ 或者 /mˈɒkiːtoʊ/ ,音譯就是『莫kito』或者『碼kito』,總之 k 要發音,因為他是模擬方法 (“mock all methods”)
Unit Testing簡介 Unit Test 是什麼 單元測試是用來測試你的程式碼一部分區塊 的一個小型方法
1 2 3 public String isEmailValid(String email) { //Code that needs to be tested } 如何寫單元測試以確保一個類別中的某方法正常運作呢?
這是一段除法程式:
1 2 3 4 5 public class Calculator { public int integerDivision(int dividend, int divisor) { return dividend / divisor; } } 我們可以寫以下的單元測試,以驗證上方程式裡,開發者沒有敲錯鍵,把除號打成乘號.
1 2 3 4 5 6 7 8 9 @Test void testIntegerDivision_whenValidValuesProvided_shouldReturnExpectedResult() { //Arrange Calculator calculatore = new Calculator(); //Act int result = calculator.
概觀 Gradle是一個基於Groovy的建構管理系統,它特別設計用來建構基於Java的專案
Gradle運行在所有主流作業系統,只需要Java JDK 8 或者以上的版本即可安裝
(1) Unix的作業系統,可以用 SDKMAN package manager 安裝,指令sdk install gradle 8.5
macOS的作業系統,可以用Homebrew package manager安裝,指令 brew install gradle
(2) 設置環境
Linux or MacOS: 在所選的目錄下解壓縮
$ mkdir /opt/gradle $ unzip -d /opt/gradle gradle-8.5-bin.zip $ ls /opt/gradle/gradle-8.5 LICENSE NOTICE bin getting-started.html init.d lib media Microsoft Windows
用 File Explorer 創建新的目錄 C:\Gradle,再把下載後解壓縮的 gradle-8.5 資料夾拉進去這個目錄
(3) 配置環境變數
Linux or MacOS: 配置 PATH 環境變數,注意要包括解壓縮後擋彈的 bin 目錄
$ export PATH=$PATH:/opt/gradle/gradle-8.6/bin Microsoft Windows: [This PC/Computer] 右鍵 → Properties → Advanced System Settings → Environment Variable 在System Variables,選擇Path→ Edit,加上 C:\Gradle\gradle-8.
ORM 物件關係的映射 Object-Relational Mapping的概念是可以將資料表內容做提取,並映射為物件的形式。
缺點:對於複雜的操作(e.g. 多表格的join或查詢),相較於直接下SQL語句,更為綁手綁腳
優點:不用操作繁瑣的SQL,也可以避免惡意注入攻擊
JPA (Java Persistence API) 持久化:資料「儲存」與「讀取」的過程,意即將資料從瞬時狀態改為持久狀態的過程(將資料存進資料庫的過程)
JPA:透過Java將資料儲存到資料庫的API
使用JPA優點:
可以隨時切換想要使用的 ORM 框架
可以使用JPQL (Java Persistence Query Language) 向資料庫下命令:
JPQL v.s. SQL:
SQL在不同資料庫,有不同SQL命令語句 JPQL操作對象不著重於資料庫,而是JPA的Entity Object下類似SQL的命令 (切換不同資料庫,不用特別修改SQL語句) 常見的 ORM 框架: Hibernate -
一般使用 Spring Data JPA 就會使用 Hibernate
Hibernate 可以自動生成SQL 語句,自動執行
優勢:
簡化開發_簡化了數據訪問層的開發流程 自動化查詢_只要方法命名好,就能生成相應的查詢語句 強大的ORM功能_便於物件和關係數據庫之間的轉換 數據庫管理_Spring Data JPA 透過Spring框架的數據源管理功能,可方便切換和配置不同數據源 劣勢:
性能問題_因為是以ORM的方式訪問數據,如果在大量數據或複雜查詢的應用情境下,可能會有性能上的影響 靈活性限制_在比較需要高級查詢的場景下有些侷限,需要編寫自定義JPQL 舉例:
1 2 3 public interface UserRepository extends JpaRepository<User, Long> { List<User> findByLastName(String lastName); } MyBatis -