Tôi có nên giữ địa chỉ email dưới dạng văn bản gốc trong cơ sở dữ liệu không?


14

Mọi người đều rõ ràng ( tôi hy vọng ) rằng lưu trữ mật khẩu mà không ít nhất là muối / băm chúng là một ý tưởng tồi tệ .

Còn email thì sao? Giả sử bạn giữ địa chỉ email đăng ký, nếu bạn mã hóa đúng cách, có thể không gửi được email cho người dùng. Mặt khác, nếu bạn không mã hóa nó và cơ sở dữ liệu bị đánh cắp, tất cả người dùng của bạn đều có nguy cơ bị spam.

Câu hỏi này không phải là về các vấn đề cụ thể của pháp luật (mặc dù chúng có thể được đưa ra, chúng vẫn phụ thuộc vào quốc gia) hoặc về việc mã hóa cơ sở dữ liệu.


Nghĩ rằng một người nên giữ tất cả PII (thông tin nhận dạng cá nhân) một cách bảo mật. Đó là dữ liệu mã hóa mà ứng dụng cần có (tức là gửi một số email xác minh) và dữ liệu băm / muối được sử dụng để xác thực (ví dụ mật khẩu). Thêm vào đó, tất nhiên, việc bảo vệ cơ sở dữ liệu là bắt buộc trong trường hợp này.
Ilan Huberman

Bạn có thể thiết lập một ứng dụng riêng chỉ lưu trữ email + mật khẩu (+ dữ liệu riêng tư khác). Bạn có thể sử dụng điều đó để gửi email bằng cách gọi nó, ví dụ như với phần còn lại bên trong api: localEmailServer / sendInvite / 123 trong đó 123 = id người dùng. Bạn có thể làm tương tự để đăng nhập, đăng lên localEmailServer / đăng nhập có thể trả về đúng hoặc sai. Bằng cách đó, ứng dụng của bạn có thể bị hack nhưng họ vẫn không có địa chỉ thư điện tử. Nếu bạn giới hạn số lượng yêu cầu cho dịch vụ này, nó sẽ được bảo vệ nhiều hơn vì bạn không dễ bị tổn thương bởi những thứ như SQL tiêm vào phần này.
Luc Franken

Câu trả lời:


9

Lưu trữ một hàm băm của các địa chỉ email có thể là tùy chọn nếu bạn giữ những hồ sơ đó chỉ để xác nhận / xác thực tài khoản.

Trong các trường hợp khác, đối với tôi, việc mã hóa các email sẽ khiến công việc duy trì cơ sở dữ liệu trở nên khó khăn hơn trong khi thu được rất ít lợi nhuận.

Có lẽ việc đảm bảo quyền truy cập của cơ sở dữ liệu là một lựa chọn tốt hơn: thường có rất nhiều thông tin khác trong cơ sở dữ liệu mà bạn không muốn thu thập.


Một câu hỏi tương tự trên Stackoverflow: Có đáng để mã hóa địa chỉ email trong cơ sở dữ liệu không?


Không thấy câu hỏi đó! Đối với hồ sơ, đó là một câu hỏi cũ nhưng tôi tin rằng nó bây giờ thuộc về các lập trình viên.
Pierre Arlaud

3
@PierreArlaud: Trên thực tế, toàn bộ vấn đề sẽ tốt hơn về Bảo mật thông tin vì nó thực sự không liên quan gì đến lập trình.
Blrfl

Có một sự trở lại về mã hóa email thực sự. Nếu bạn không lưu trữ các khóa trong cùng một cơ sở dữ liệu bị xâm phạm, bạn sẽ không cho phép kẻ xấu sử dụng email. Hãy nhớ rằng một email được sử dụng nhiều để kích hoạt tài khoản và thay đổi thông tin đăng nhập.
NoChance

2

Tôi nghĩ rằng bạn đã nói tất cả.

Điều duy nhất tôi có thể nghĩ đến là không sử dụng bộ lọc băm một chiều như SHA1 để lưu trữ các địa chỉ email. Sử dụng một số mã hóa khóa công khai (có thể đảo ngược) trong ứng dụng của bạn và chắc chắn rằng khóa riêng của bạn không ở gần cơ sở dữ liệu, để chúng không thể bị "đánh cắp" cùng nhau.

Bằng cách đó, bạn vẫn có thể giải mã các địa chỉ email để gửi email,


6
Và? Và? Sự hồi hộp đang giết chết tôi :)
Pierre Arlaud

Vậy thì sao? Hồi hộp là gì? Mã hóa (giải mã) trong ứng dụng của bạn trước khi lưu trữ trong cơ sở dữ liệu có nghĩa là không phải lo lắng nếu cơ sở dữ liệu bị đánh cắp, bị hack, v.v. Nhưng, khi bạn muốn gửi email, bạn có thể giải mã địa chỉ email từ cơ sở dữ liệu. Đó không phải là điều bạn muốn ? Tui bỏ lỡ điều gì vậy?
Mawg nói rằng phục hồi Monica

2
Chỉ cần một nhận xét về nhân vật cuối cùng trong câu trả lời của bạn: D
Pierre Arlaud

Tôi đang cố gắng tìm ra câu trả lời của bạn nói rằng manlio không. Về cơ bản, ý tưởng là có một hàm băm có thể đảo ngược của email, chẳng hạn như hàm băm có muối. Hoặc có lẽ bạn đã có một cái gì đó hoàn toàn khác trong tâm trí?
Pierre Arlaud

Xin lỗi, tôi đoán chúng tôi đã gửi cùng một lúc.
Mawg nói rằng phục hồi Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.