Recca Chao 的 gitHub page

推廣網站開發,包含 Laravel 和 Kotlin 後端撰寫、自動化測試、讀書心得等。Taiwan Kotlin User Group 管理員。

View on GitHub

翻譯自

https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Database_Security_Cheat_Sheet.md


資料庫安全防護小抄

簡介

這份小抄提供了有關安全配置 SQL 和 NoSQL 資料庫的建議。它旨在供應用程式開發人員使用,如果他們負責管理資料庫。有關如何防範 SQL 注入攻擊的詳細資訊,請參閱SQL 注入防護小抄

保護後端資料庫

應用程式的後端資料庫應該與其他伺服器隔離,並且只與盡可能少的主機連接。這項任務將取決於系統和網路架構。請考慮以下建議:

類似的保護措施應該保護與資料庫一起使用的任何基於 Web 的管理工具,例如 phpMyAdmin。

當應用程式在一個不受信任的系統上運行(例如一個厚客戶端),它應始終通過可以強制執行適當訪問控制和限制的 API 連接到後端。從厚客戶端直接連接到後端資料庫絕對不應該發生。

實施傳輸層保護

大多數資料庫的默認配置都是使用未加密的網路連接,儘管有些會加密初始驗證(例如 Microsoft SQL Server)。即使初始驗證是加密的,其餘的流量將是未加密的,所有類型的敏感信息都將以明文形式在網路上傳送。應採取以下步驟來防止未加密流量:

permalink: https://www.example.com/database-security-cheat-sheet

配置安全認證

資料庫應始終要求進行認證,包括來自本地伺服器的連線。資料庫帳戶應該:

與任何具有自己用戶帳戶的系統一樣,應遵循通常的帳戶管理流程,包括:

對於 Microsoft SQL Server,考慮使用Windows 或整合式驗證,該驗證使用現有的 Windows 帳戶而不是 SQL Server 帳戶。這也消除了在應用程式中存儲憑證的要求,因為它將使用運行下的 Windows 使用者的憑證進行連接。Windows Native Authentication Plugins 為 MySQL 提供了類似的功能。

安全地存儲資料庫憑證

資料庫憑證絕不能存儲在應用程式原始碼中,尤其是如果它們未加密。相反,它們應存儲在一個配置文件中,該配置文件:

在可能的情況下,這些憑證還應該使用內建功能進行加密或以其他方式進行保護,例如 ASP.NET 中提供的 web.config 加密

建立安全權限

當開發人員為資料庫使用者帳戶分配權限時,他們應該採用最小權限原則(即,帳戶應僅具有應用程式正常運作所需的最小權限)。這個原則可以應用在資料庫中的多個越來越細緻的層級,取決於資料庫中可用的功能。您可以在所有環境中執行以下操作:

對於大多數安全關鍵應用程式,應在更細緻的層級上應用權限,包括:

資料庫組態和硬化

資料庫伺服器的底層作業系統應該進行硬化,基於安全基準,如CIS BenchmarksMicrosoft Security Baselines

資料庫應用程式也應該被正確組態和硬化。以下原則應適用於任何資料庫應用程式和平台:

以下各節提供了有關特定資料庫軟體的進一步建議,除了上述更一般的建議。

強化 Microsoft SQL Server

強化 MySQL 或 MariaDB 伺服器

強化 PostgreSQL 伺服器

MongoDB

Redis