運維安全
- 安全原則
- 黃金法則
- 密碼學
-
- 對稱加密算法
- 非對稱加密算法
- 雜湊演算法
- 身份認證
-
- 對外認證
- 對内認證
- 單點登入
-
- CAS
- JWT
- OAuth
- OpenID
- 小記
- Web安全
-
- XSS攻擊
- SQL注入
-
- 修改where子句
- 執行任意語句
安全原則
機密性(Confidentiality)、完整性(Integrity)、可用性(Availability),簡
稱為 CIA 三元組,是安全的基本原則。理論上來說,一個完整的安全保障體系,應該充分
考慮到所有的 CIA 原則。當然,實際情況中,我們會根據企業需求,對安全在這三個方向
上的投入做取舍。我們平時在評判一個企業的安全水準時,也會分别從這三個方向進行考
量。
黃金法則
黃金法則:在使用者操作的各個環節中,我們所需要采取的安全政策。黃金法則的核
心内容包括三部分:認證、授權、審計。大部分情況下,事前防禦屬于認證,事中防禦屬于
授權,事後防禦屬于審計。
密碼學
建議:對稱加密用 AES-CTR、非對稱加密用 ECC、雜湊演算法用 SHA256。
對稱加密算法
發送方使用加密算法和密鑰生成消息對應的密文;
接收方想要閱讀消息,需要使用對應的解密算法和同樣的密鑰解密;
常見的經典對稱加密算法有 DES、IDEA、AES、國密 SM1 和 SM4。
一般情況下,選取 AES128 進行加解密運算,就能獲得較高的安全性和性能。
非對稱加密算法
非對稱加密中加密和解密使用不同的密鑰。
發送方使用公鑰對資訊進行加密,接收方收到密文後,使用私鑰進行解密。
常見的非對稱加密算法:RSA(性能快,用的較多)、ECC 和國密 SM2
雜湊演算法
常見算法:MD5 、SHA 算法計算一個唯一的 id
除了提供唯一的 id,其更大的利用價值還在于它的不可逆性。當使用者注冊,送出賬号密碼時,作為一個安全的應用,通常使用雜湊演算法存儲密碼。
身份認證
對外認證
對外認證通常是使用者直接通路業務,是單一場景認證。外部的通常使用密碼結合手機短信等認證
對内認證
對内認證是指内部系統之間的通路,如git、mysql等。為了防止多系統帶來的賬号切換和安全性問題,通常使用sso單點登入解決身份認證問題
單點登入
典型的單點登入方式:CAS (Central Authentication Service,集中式認證服務)流程、JWT、OAuth 和 OpenID。
CAS
CAS 是一個開源的單點登入架構,它不屬于某一種單點登入的實作方式,而是提供了一整套完整的落地方案。
JWT
JWT(JSON Web Token)是一種非常輕量級的單點登入流程。它會在用戶端儲存一個憑證資訊,之後在你每一次登入的請求中都帶上這個憑證,将其作為登入狀态的依據。JWT的好處在于,不需要應用服務端去額外維護 Cookie 或者 Session 了。但是,正是因為它将登入狀态落到了用戶端,是以我們無法進行登出等操作了。
OAuth
OAuth(Open Authorization)的主要特點是授權,也是我們通常用 QQ、微信登入其他應用時所采用的協定。通過 OAuth,使用者在完成了認證中心的登入之後,應用隻能夠驗證使用者确實在第三方登入了。但是,想要維持應用内的登入狀态,應用還是得頒發自己的登入憑證。這也就是為什麼 QQ 授權後,應用還需要綁定你的手機号碼。這也就意味着,應用是基于 QQ 的資訊建立了一個自身的賬号。
OpenID
OpenID(Open Identity Document)和 OAuth 的功能基本一緻。但是,OpenID 不提供授權的功能。最常見的,當我們需要在應用中使用微信支付的時候,應用隻需要收集支付相關的資訊即可,并不需要擷取使用者的微信頭像。
小記
JWT 适用範圍廣,在單點登入的選取上面,如果想要将使用者資訊做統一管理,選擇它最為簡單;
如果認證中心隻是被用來維護賬号密碼,由業務去維護使用者所綁定的其他手機等資訊,那麼,采用 OAuth 更合适。
Web安全
XSS攻擊
XSS工具的原理是誘導使用者點選連結,執行js腳本,竊取使用者資訊,仿冒使用者操作。
分類
反射型:浏覽器–後端–浏覽器
基于DOM:URL–浏覽器
持久型:浏覽器–後端–資料庫–後端–浏覽器
防護
CSP(Content Security Policy,内容安全政策)在服務端傳回的 HTTP header 裡面添加一個 Content-Security-Policy 選項,然後定義資源的白名單域名。浏覽器就會識别這個字段,并限制對非白名單資源的通路。
SQL注入
通過構造一些惡意的輸入參數,在應用拼接 SQL 語句的時候,去篡改正常的 SQL 語意,進而執行黑客所控制的 SQL 查詢功能。
修改where子句
如下列sql
select * from users where username='' and password = ''
修改為
select * from users where username='' and password = '' or password = ''
則pasword字段為True,即可繞過密碼登入
執行任意語句
如下sql
insert into(username, password) values ('zzd', '111');
修改為
insert into users (username, password) values ('zzd', '111'); select * from users;
通過;号分割即可執行任意sql了
防護
使用ORM替代直接使用sql可以有效的防止此類問題