web安全——數據庫(mysql)


簡介

數據安全是現在互聯網安全非常重要一個環節。而且一旦數據出現問題是不可逆的,甚至是災難性的。

有一些防護措施應該在前面幾個博文說過了,就不再贅述。比如通過防火牆控制,通過系統的用戶控制,通過web應用的控制等。
想說的是,任何一個節點都不是單獨存在的。

場景

  1. 確保應用本身安全。
  2. 控制系統用戶對數據庫的訪問權限。
  3. 控制數據庫用戶對數據庫的訪問權限。
  4. 確保數據庫敏感數據的安全。
  5. 確保數據庫整個數據的完整性。
  6. 規范日常運維操作
  7. 合理的划分業務。

解決方案

應用安全

刪除默認的數據庫和用戶

mysql初始化后會自動生成空用戶和test庫,這會對數據庫構成威脅,我們全部刪除。

mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not(host=”localhost” and user=”root”);
mysql> flush privileges;

禁止數據庫從本地直接加載內容

在某些情況下,LOCAL INFILE命令可被用於訪問操作系統上的其它文件(如/etc/passwd),應使用下現的命令:

mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1
# 更簡單的方法是:
mysql> SELECT load_file("/etc/passwd")

為禁用LOCAL INFILE命令,應當在MySQL配置文件的[mysqld]部分增加下面的參數:
set-variable=local-infile=0

控制用戶的權限

這里用戶,指的是數據庫里的用戶。

控制訪問的ip。

只允許信任的ip訪問,其他的ip都應該拒絕。
比如:只允許辦公網絡,還有業務服務器對應的網絡可以訪問。

區分角色

區分角色,給不同的權限。角色的划分需要根據具體的使用場景。
下面簡單舉例:

  1. 角色:view。權限:只允許查詢數據,不允許做任何修改。場景:業務正確性驗證時
  2. 角色:update。權限:允許修改數據,但是不允許修改數據結構。場景:程序運行
  3. 角色:operate。權限:允許修改表結構,允許新增和修改表,不允許刪除表,不允許刪庫。場景:產品要發布的時候才可以使用,通過升級sql方式執行。
  4. .....

加密敏感信息

要使用md5,sha等算法加密。這樣即使數據丟失,也能減少損失。比如:登錄密碼,支付密碼等。

保證數據的完整性

  1. 解決單點故障。主從,主主。
  2. 需要備份與還原。

規范日常操作

  1. 如果沒有特殊需求,應該使用最小的用戶。比如只使用查看的用戶。
  2. 有需要修改數據或者結構的操作,可以考慮兩人一起。或者可以考慮做成功能,減少人為直接操作數據庫
  3. 在測試環境上測試OK,才往正式環境執行。

業務的划分

少用數據庫

可以通過緩存,靜態化。盡可能少的使用數據庫。能不使用數據庫是最安全。

分庫分表

敏感的數據和常用的數據,最好從表的設計上隔離。比如:用戶的詳情信息和支付信息最好分開。

優化sql

這個也非常重要,往往就是因為不重要sql的優化,所以數據庫對應的服務器資源吃滿不提供服務。

驗證方法

通過不同的賬號操作,判斷有沒有對應的權限。

參考資料

  1. 保障MySQL安全的十四個最佳方法
  2. Mysql安全配置
  3. 《高性能MySql》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM