Security
其中需要
分清楚XSS和CSRF的差別
基礎原理:不要相信使用者的輸入、請求。
XSS
跨站 Script 攻擊,使用網頁提供的 input 或者其他可供輸入的元素,讓攻擊者有機可乘使用 script/惡意程式碼進行跨站類的攻擊
防範:使用一些編碼或 escape 過濾或加入一些特殊符號再進入 server 之前。禁止被輸入非法的字元同時也避免惡意碼被執行
CSRF
使用使用者的 cookie 或 session, 偽裝自己是正常的網路請求
防範:使用 CSRF token 或者在 http header 做驗證
SQL Injection
使用 SQL 語法的特性,使用網頁提供的 input 或者其他可輸入的元素,注入 SQL 得出一些資料或進行攻擊
防範:使用
prepare statement
, 或者一般框架的 ORM 方式,總之在開發中盡量不要使用 raw sql 或者字串串接法串接 SQL
CORS
瀏覽器會做檢查、前端可以先發送 preflight. 使後端 server 能認得是否是合法的請求。
Password
- Encoding 編碼: 換個方式表達資料, ex. encodeURI() & decodeURI()、base64
- Encrypt 加密: 需要金鑰(key)解密之後才能表達資料 ex. AES、RSA
- Hashing 雜湊: 為不可逆的一個步驟,通常會有
雜湊函數
來處理各種過程,確保資料驗證性
密碼的儲存策略:根據下面文章整理
- 方案一: Base64 編碼:可以逆推、不推薦、方便 decode
- 方案二: AES256 加密:因爲使用者要登入時,後端必須確認使用者輸入的密碼加密後跟資料庫內的 password 是否符合,仍會把 key 放在 server 上。那就仍然有洩漏的風險
- 方案三:用 SHA1 雜湊:如果密碼長度與複雜度夠高的話...但如果密碼複雜度與長度不夠高仍然有可能被目前的高科技破解硬查出來
- 方案四:加鹽後用 SHA1 雜湊(至少比較安全的方案):salt 是一種隨機生成的字串,讓他與密碼串接之後雜湊。
- 方案五:用 Bcrypt 慢雜湊演算法
AES 對稱加密
Ref: https://easonwang.gitbook.io/crypto/aes