Trước khi quyết định các vấn đề bảo mật như vậy, bạn nên đánh giá mô hình mối đe dọa. Nếu không có ý tưởng về những gì bạn đang bảo vệ chống lại, bất kỳ biện pháp nào bạn thực hiện có thể sẽ không có giá trị.
Bây giờ, có một vài điều bạn có thể lo lắng trong bối cảnh này:
- Kẻ tấn công giành quyền truy cập vật lý vào dữ liệu của bạn (ví dụ: đột nhập vào trung tâm dữ liệu, đánh cắp băng sao lưu, v.v.)
- Kẻ tấn công giành quyền truy cập đọc vào cơ sở dữ liệu thô của bạn
- Những kẻ tấn công xâm phạm ứng dụng của bạn, ví dụ như thông qua SQL, tràn bộ đệm, v.v.
Đối với kịch bản đầu tiên, việc lưu trữ cơ sở dữ liệu và tất cả các bản sao lưu trên các khối được mã hóa sẽ hoạt động, miễn là máy chủ không đầu - ăn cắp máy chủ hoặc các băng sau đó sẽ yêu cầu phá vỡ mã hóa cấp đĩa.
Đối với kịch bản thứ hai, mã hóa dữ liệu cơ sở dữ liệu sẽ giúp ích, nhưng chỉ khi bạn không lưu trữ các khóa hoặc cụm mật khẩu cần thiết ở bất cứ đâu.
Trong kịch bản thứ ba, mọi thứ phụ thuộc vào bối cảnh cuộc tấn công xảy ra: ví dụ, nếu đó là một cuộc tấn công XSS hoặc CSRF, thì kẻ tấn công có thể làm bất cứ điều gì người dùng hợp pháp có thể và mã hóa dữ liệu của bạn hoàn toàn không giúp ích gì .
Do đó, mô hình mối đe dọa của bạn là kẻ tấn công giành quyền truy cập đọc vào cơ sở dữ liệu thô, bằng cách tìm thông tin đăng nhập và quản lý để đăng nhập vào máy chủ cơ sở dữ liệu từ bên ngoài hoặc bằng cách truy cập root vào máy chủ cơ sở dữ liệu. Một đường dẫn điển hình là đầu tiên đạt được quyền truy cập shell trên máy chủ web; từ đó, kẻ tấn công có thể đọc thông tin đăng nhập từ tệp cấu hình và kết nối với cơ sở dữ liệu.
Một xem xét bổ sung là nơi bạn giữ các khóa và cụm mật khẩu, đặc biệt nếu bạn đang sử dụng một nền tảng với mô hình thực thi không trạng thái như PHP. Lý tưởng nhất là bạn có khách hàng nhập cụm mật khẩu của họ khi được yêu cầu và chỉ giữ nó trong bộ nhớ, hoặc thậm chí tốt hơn, thực hiện phía máy khách giải mã (nhưng điều này thường không khả thi). Trên nền tảng không trạng thái, trạng thái thường được mang theo bằng cách sử dụng phiên, memcache, cơ sở dữ liệu hoặc tệp phẳng; nhưng tất cả những thứ này dễ bị tổn thương hơn nhiều so với việc giữ trạng thái trong bộ nhớ riêng của ứng dụng web. Tránh đây là vấn đề trứng gà, bởi vì nếu bạn mã hóa trạng thái trước khi duy trì nó, bạn chỉ cần tạo một bí mật khác mà bạn phải nhớ một cách an toàn. Ghi nhớ cụm mật khẩu trên máy khách và gửi nó cùng với mỗi yêu cầu cần nó có thể là giải pháp ít kinh khủng nhất sau đó;