項目開發安全經驗總結
1、 安全思維
- A)嚴格控制權限,最小業務授權;
- B)記錄詳細日誌,快速完整識別追查問題發生的位置;
- C)定時備份(完整備份、每日增量備份),增加業務恢復可能;
- D)數據通信加密(HTTPS+高級別SSL證書),數據保存加密(RSA 4096bits);
- E)定時檢測(特別是晚上10點到凌晨6點),關注異常行爲。
2、 Linux/Windows服務器安全
a) 系統安全
- i. 使用穩定高版本的成熟系統
- ii. 定時升級軟件,打補丁
b) 權限控制
- i. 限制端口開放
- ii. 限制ip訪問(最好禁用IPv6,研究比較少)
- iii. 限制各類應用,分別給予專用 用戶名/用戶組
- Php: www用戶 www用戶組
- Mysql: mysql用戶 mysql用戶組
- ftp: ftp用戶 ftp用戶組
- iv. 限制目錄權限
- 限制正常目錄/文件的權限,修改爲root:root 755權限
- 限制上傳目錄的權限,修改爲www:www 700權限
- 限制上傳的文件權限,修改爲644權限
c) 定時檢測
本項內容需要編寫bash、sh腳本,配置計劃任務來實現。
- i. 監測系統用戶,發現新增用戶,異常權限用戶馬上報警
- ii. 監測文件寫入,特別是可執行文件,腳本的寫入
- iii. 監測並記錄異常時間段的正常訪問:ssh / mysql等
d) 記錄操作日誌,定時保護日誌
通過定時轉移項目日誌,修改日誌權限來保護日誌。
3、 Nginx/Apache安全
- A)調整日誌格式,記錄更詳細信息:多種用戶IP,post數據等
- B)採用HTTPS通信,使用高級別的SSL證書
- C)Set-Cookie:HttpOnly、Secure / X-Frame-Options SAMEORIGIN
- D)根據業務過濾常見的GET類型攻擊
- E)嚴格控制上傳的文件,並限制上傳目錄執行web腳本文件。
4、 Mysql 數據庫安全
- A)Root用戶限制遠程登錄。必須使用遠程超級用戶的,一定要限制IP
- B)每個應用專用一個賬號,指定訪問IP,限制權限範圍。上線運行時,只給Select_priv、Insert_prive、Update_priv、Delete_priv權限。更特殊的可根據數據表,甚至數據字段來授權。
- C)開啓binlog日誌
5、 Php web運行環境安全
- A)使用disable_functions限制風險函數的執行,在不影響業務下可開啓安全模式。
- B)expose_php off 防止暴露源碼
- C)記錄錯誤日誌
- D)合理配置線程工作模式與子進程數量,防止程序崩潰。
6、 程序安全
a) 頁面限制
- i. 限制頁面的訪問
- ii. 限制頁面的訪問次數/頻率
b) 參數限制
- i. 限制參數數量,製作頁面參數白名單
- ii. 限制參數類型,過濾參數內容
- iii. 限制參數輸出,防止XSS攻擊,防止關鍵參數泄露
c) 行爲限制
- i. 驗證數據提交防止被篡改,一次一碼 md5(uniqid())
- ii. 限制驗證碼類使用次數
- iii. 限制密碼類錯誤嘗試次數
d) 安全監控
- i. 監控超級用戶/管理員的權限異常
- ii. 監控並記錄超級用戶/管理員的操作行爲
- iii. 監控核心變量的異常
e) Mysql數據接口
- i. 生產環境,禁止異常sql命令,特別是 權限修改 跟into file這類sql命令;
- ii. 規範Sql命令,保障參數安全。
f) 風險控制機制
- i. 程序源代碼加密,減緩代碼暴露核心參數;
- ii. 核心數據採用加密存儲(RSA 4096bits),保護核心數據直接暴露;
- iii. 如採用api接口通信的,最好對數據加密後再傳輸(HTTPS也是可以被釣魚的)。
7、 Memcache 、 Redis等緩存服務器
- a) 限制使用IP,僅限本機使用;
- b) 嚴禁緩存核心數據,防止關鍵參數泄露。
8、寫在最後
以上都是本人歷年經驗總結,寫的不多,更談不上詳細,更多細節需要讀者自己補充完善,算是拋轉引玉吧。
歡迎拍磚。