Skip to content

Commit

Permalink
update note
Browse files Browse the repository at this point in the history
  • Loading branch information
nicehorse06 authored Aug 2, 2024
1 parent 7f60a4d commit b4aa60c
Show file tree
Hide file tree
Showing 4 changed files with 203 additions and 3 deletions.
116 changes: 116 additions & 0 deletions interview/network/http.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,123 @@
# HTTP



# HTTP methood
## GET
* 用於請求從伺服器取得資源(資料)
* 範例:取得某用戶的資料 GET /users/123
## POST
* 用於將新的資源提交到伺服器
* 範例:創建新用戶 POST /users
## PUT
* 用於更新伺服器上的現有資源
* 範例:更新用戶資料 PUT /users/123
## PATCH
* 用於部分更新伺服器上的現有資源。
* 範例:更新用戶的部分資料 PATCH /users/123
## DELETE
* 用於刪除伺服器上的資源。
* 範例:刪除某用戶 DELETE /users/123

## HEAD
* 用於請求資源的元數據(類似 GET,但不返回資源本身)。
* 範例:檢查資源是否存在 HEAD /users/123

## OPTIONS
* 用於請求伺服器支持的 HTTP methods。
* 範例:查詢伺服器支持的請求方法 OPTIONS /users

# HTTP 結構
* HTTP 請求和回應都由三個部分組成:起始行(start line)、標頭(headers)、主體(body)。
## HTTP 請求結構
### 起始行(start line)
* 包含 HTTP method、資源 URL 以及 HTTP 版本。
* 範例:GET /users/123 HTTP/1.1

### 標頭(Headers)
* 包含一些元數據,例如請求的主機、用戶代理、內容類型等。
```
Host: example.com
User-Agent: Mozilla/5.0
Content-Type: application/json
```
### 主體(Body)
* 包含請求的實際數據,常用於 POST、PUT 和 PATCH 請求。
``` json
{
"name": "John Doe",
"email": "john.doe@example.com"
}
```


## HTTP 回應結構
### 起始行
* 包含 HTTP 版本、狀態碼和狀態描述。
* 範例:HTTP/1.1 200 OK
### 標頭(Headers)
* 包含一些元數據,例如伺服器類型、內容類型、內容長度等。
```
Server: Apache/2.4.1
Content-Type: application/json
Content-Length: 123
```
### 主體(Body)
* 包含回應的實際數據,通常是 HTML、JSON 或 XML 格式。
``` json
{
"id": 123,
"name": "John Doe",
"email": "john.doe@example.com"
}
```



# RESTful API
* RESTful API 是一種基於 REST(Representational State Transfer)架構設計的應用程式介面

## 特性
* 無狀態(Stateless)
* 每個請求都包含所有必要的信息(例如認證資訊),伺服器不會保存客戶端的狀態。
* 無狀態的設計使系統更加可擴展和可靠。
* 統一接口(Uniform Interface)
* 通過統一和標準化的 URI 和 HTTP methods 來訪問資源。
* 這種設計使得 API 更加可預測和易於使用。
* 可尋址資源(Addressable Resources)
* 每個資源都有一個唯一的 URI,客戶端可以通過 URI 訪問和操作資源。
* 基於表示的操作(Representation-based Operations)
* 客戶端和伺服器通過資源的表示進行通信,通常以 JSON 或 XML 格式傳輸數據。
* 超媒體作為應用狀態引擎(HATEOAS, Hypermedia As The Engine Of Application State)
* 回應中包含了相關資源的連結,使得客戶端可以根據連結來導航和操作資源。

## RESTful API 的 HTTP Methods 和 URI 設計
### GET
讀取資源。
範例:GET /users 取得所有用戶,GET /users/123 取得 ID 為 123 的用戶。

### POST
創建新資源。
範例:POST /users 創建新用戶。

### PUT
更新資源。
範例:PUT /users/123 更新 ID 為 123 的用戶。

### PATCH
部分更新資源。
範例:PATCH /users/123 部分更新 ID 為 123 的用戶。

### DELETE
刪除資源。
範例:DELETE /users/123 刪除 ID 為 123 的用戶。





# Set-Cookie

# cache

## Cache-Control
Expand Down
48 changes: 48 additions & 0 deletions interview/security/encryption_hash.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@

# 加密與hash

# 對稱式加密(Symmetric Encryption)
## 特點
* 單一密鑰:
* 加密和解密使用相同的密鑰。
* 密鑰必須在加密方和解密方之間安全地共享。
* 加密速度快:
* 對稱加密演算法通常比非對稱加密演算法快,適合處理大量數據。
* 密鑰管理困難:
* 安全傳輸和存儲密鑰是主要挑戰,尤其在多方之間需要安全地共享密鑰。
## 常見演算法
* AES(Advanced Encryption Standard)
* DES(Data Encryption Standard)
* 3DES(Triple DES)
* RC4
## 應用場景
* 資料的批量加密,例如磁碟加密、資料庫加密。
* 在 SSL/TLS 協議中,用於加密會話數據。

# 非對稱式加密(Asymmetric Encryption)
## 特點
* 公鑰和私鑰:
* 使用一對相關聯的密鑰:公鑰(公開)和私鑰(保密)。
* 公鑰用於加密,私鑰用於解密,反之亦然。
* 加密速度慢:
* 非對稱加密演算法相對較慢,通常只用於加密少量數據或加密對稱加密的密鑰。
* 密鑰管理簡單:
* 只需安全地保護私鑰即可,公鑰可以自由分發。
## 常見演算法
* RSA(Rivest-Shamir-Adleman)
* ECC(Elliptic Curve Cryptography)
* DSA(Digital Signature Algorithm)
## 應用場景
* 數字簽名和證書驗證。
* 安全密鑰交換,例如在 SSL/TLS 握手過程中。
* 加密電子郵件和數據傳輸。

# 對稱式加密和非對稱式加密比較
| 特點 | 對稱式加密 | 非對稱式加密|
|-----|-----|------|
| **密鑰數量** | 一個密鑰(加密和解密相同) | 一對密鑰(公鑰和私鑰)|
| **加密/解密速度** |||
| **安全性** | 密鑰共享和管理困難,易受竊取風險| 安全性高,私鑰保護難度小 |
| **應用場景** | 大量數據加密、實時加密| 密鑰交換、數字簽名、證書驗證 |
| **密鑰管理** | 困難,需要安全的密鑰分發和管理 | 簡單,只需保護私鑰 |
| **常見演算法** | AES, DES, 3DES, RC4 | RSA, ECC, DSA|
13 changes: 10 additions & 3 deletions interview/security/tls.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
# TLS和https 介紹

## HTTP 握手
# HTTPS作用
* 加密傳輸:
* HTTPS 對數據在客戶端和伺服器之間的傳輸進行加密,防止數據在傳輸過程中被攔截和竊取。
* 數據完整性:
* HTTPS 保證數據在傳輸過程中不會被篡改。如果數據被篡改,接收方會發現並拒絕這些數據。
* 身份驗證:
* HTTPS 通過 SSL/TLS 證書驗證伺服器的身份,確保客戶端連接到的是合法的伺服器,而不是中間人攻擊者。
# TLS 握手
* client ---隨機數(random1) + 支援的加密方式 ---> server
* 支援的加密方式是為後面對稱式加密準備
* client <---隨機數(random2) + 選一個加密方式 + CA憑證(含公鑰) --- server
* 若CA無效怎警告使用者是否繼續訪問
* client ---隨機數(pre-master)(CA公鑰加密) ---> server
* client 已知random1+random2+pre-master生成 master-secret
* client 已知random1+random2+pre-master生成 master-secret
* server 用私鑰解開client傳來的加密,得到pre-master
* 已知random1+random2+pre-master生成 master-secret
* server 已知random1+random2+pre-master生成 master-secret
* client <---生成master-secret完畢後彼此發送finished ---> server
* client 與 server 皆使用該 master-secret 加密的資料來進行通信,稱為對稱式加密。

Expand Down
29 changes: 29 additions & 0 deletions interview/security/xss.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# XSS(Cross-Site Scripting)

跨網站指令碼攻擊(XSS)是一種安全漏洞,允許攻擊者在受害者的瀏覽器中執行惡意指令碼。
這些指令碼通常被注入到合法的網頁或應用程式中,目的是竊取資料、篡改內容或進一步攻擊其他使用者。

## 對攻擊者的優點
* 低技術門檻:XSS 攻擊相對簡單,只需注入一段惡意指令碼。
* 廣泛影響:一次成功的 XSS 攻擊可以影響大量使用者,特別是如果目標網站有大量訪客。
* 難以檢測:由於 XSS 攻擊通常在受害者的瀏覽器中執行,伺服器很難檢測到這種攻擊。

## 場景
* 用戶輸入未經處理:網站或應用程序未對用戶輸入進行適當的驗證和過濾,導致惡意指令碼被注入。
* 評論區或論壇:攻擊者在評論區、論壇或其他用戶生成內容的地方注入惡意指令碼。
* 電子郵件或消息:攻擊者通過電子郵件或消息發送包含惡意指令碼的鏈接,誘導受害者點擊。

## 類型
* 存儲型(Stored XSS):惡意指令碼被永久存儲在目標伺服器上,例如在數據庫中。當其他用戶請求包含這些指令碼的頁面時,指令碼就會被執行。
* 反射型(Reflected XSS):惡意指令碼通過 URL 或其他輸入參數被立即反射回用戶端並執行。這種攻擊通常需要攻擊者誘導受害者點擊惡意鏈接。
* 基於 DOM(DOM-based XSS):惡意指令碼直接在用戶端被執行,並且不涉及伺服器的響應。這種攻擊利用了網頁的 Document Object Model (DOM)。


## 防禦措施
* 輸入驗證與過濾:對所有用戶輸入進行嚴格的驗證和過濾,確保不包含惡意指令碼。
* 輸出編碼:對用戶輸入的數據在顯示之前進行編碼,防止惡意指令碼被執行。
* escape 函數用於將用戶輸入進行 HTML 編碼,從而防止 XSS 攻擊
* 使用安全的 API:避免使用會產生 XSS 漏洞的函數或方法,優先使用安全的 API。
* 內容安全政策(CSP):配置內容安全政策,限制網頁可以加載的資源,以減少 XSS 攻擊的可能性。
## ref
* GPT

0 comments on commit b4aa60c

Please sign in to comment.