2012-09-18 40 views
10

Tôi nên đặt các biện pháp bảo mật nào để đảm bảo rằng cơ sở dữ liệu của tôi bị xâm nhập, mã thông báo truy cập lâu dài không thể bị đánh cắp?Lưu trữ an toàn mã thông báo truy cập

Mã thông báo truy cập dài sẽ tốt bằng tên người dùng và mật khẩu cho một dịch vụ cụ thể, nhưng khi nói chuyện với người khác, có vẻ như hầu hết (tôi đã bao gồm) mã thông báo truy cập cửa hàng ở dạng văn bản thuần túy. Điều này có vẻ là xấu như lưu trữ mật khẩu ở dạng văn bản thuần túy. Rõ ràng một người không thể đánh số & băm mã thông báo.

Lý tưởng nhất là tôi muốn mã hóa chúng, nhưng tôi không chắc chắn cách tốt nhất để làm điều này, đặc biệt là trên một dự án mã nguồn mở.

Tôi tưởng tượng câu trả lời cho câu hỏi này giống với câu trả lời về thông tin thanh toán và tuân thủ PCI, nhưng tôi cũng hỏi tại sao không có nhiều thảo luận về điều này? Có lẽ tôi đang thiếu một cái gì đó.

+0

Ý của bạn là "đặc biệt là trên một dự án nguồn mở"? Bạn nghĩ gì khiến cho quyết định của bạn đi với một loại lược đồ mã hóa cụ thể khác nhau bởi vì dự án của bạn không phải là nguồn đóng? –

Trả lời

7

Bạn chỉ muốn xác minh mã thông báo do người khác cung cấp? Nếu có, hãy coi nó như là một mật khẩu. Sử dụng thuật toán dẫn xuất byte như Password Based Key Derivation Function 2 (PBKDF2) (cũng được mô tả trong RFC 2898) với 10.000 lần lặp và lưu trữ 20 byte đầu tiên hoặc lâu hơn. Khi nhận được mã thông báo. Nó không phải là thực tế đảo ngược.

Bạn có muốn hiển thị mã thông báo cho người khác để xác thực không? Nếu vậy, đây là một thách thức bởi vì, nếu ứng dụng của bạn có thể giải mã hoặc truy cập vào mã thông báo, để kẻ tấn công có thể. Hãy nghĩ về Maxim của Shannon, kẻ tấn công biết hệ thống, đặc biệt là cho một dự án nguồn mở.

Trong trường hợp này, cách tốt nhất là mã hóa mã thông báo bằng thuật toán mạnh (ví dụ AES256), tạo khóa bằng máy phát số ngẫu nhiên chuẩn mã hóa mạnh và lưu khóa (key) an toàn ở vị trí khác với dữ liệu , chẳng hạn như trong một tệp được bảo vệ quyền bên ngoài cơ sở dữ liệu trong ví dụ trên. Sau này có nghĩa là các cuộc tấn công SQL injection sẽ không tiết lộ các khóa.

+0

Cảm ơn - Tôi đang đề cập đến trường hợp sử dụng sau của bạn, nơi tôi cần để có thể sử dụng mã thông báo sau này khi người dùng không có mặt. –

+0

@akton nhưng tại sao lại coi mã thông báo như mật khẩu? Mật khẩu (văn bản thuần túy) là thông tin chúng tôi không muốn kẻ tấn công nhận được b/c anh ta/cô ấy có thể thử và sử dụng nó để đăng nhập vào một dịch vụ khác với cùng một pwd. nhưng mã thông báo chỉ hợp lệ cho dịch vụ của riêng bạn - vì vậy nếu kẻ tấn công có/tay trên token/db anh ta/cô ấy có thể gây hại nhiều hơn chỉ sử dụng mã thông báo để đăng nhập vào tài khoản của bạn ... tôi không thấy gì ? – pkyeck

+0

Giả sử câu hỏi là chính xác, mã thông báo là một bằng chứng dài hạn cho mỗi người dùng, có thể xác thực người dùng. Nói cách khác, nó là một mật khẩu. – akton

Các vấn đề liên quan