項目開發安全經驗總結

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、寫在最後

以上都是本人歷年經驗總結,寫的不多,更談不上詳細,更多細節需要讀者自己補充完善,算是拋轉引玉吧。
歡迎拍磚。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章