2010-09-09 8 views
7

Khi người dùng đăng ký tài khoản họ nhận được email có mã xác minh mà họ có thể nhấp để xác minh tài khoản của họ.MD5 là cách hay để tạo mã xác minh tài khoản

Đây là cách tôi tạo mã xác minh.

md5(rand(0,1000) 

Có sử dụng phương pháp bên dưới một lựa chọn không tốt? Nó tạo ra một số ngẫu nhiên từ 0-1000. Vì chỉ có 1000 tùy chọn, và chỉ có một số kẻ tấn công MD5 mới biết được, nên chỉ có 1000 người dùng thử nghiệm để xác minh tài khoản mà không thực sự thuộc về họ

+0

"sẽ chỉ mất một kẻ tấn công chỉ trong 1000 thử nghiệm để xác minh tài khoản mà không thực sự thuộc về họ" Đó là lý do tại sao bạn cũng cần giới hạn tốc độ. – NullUserException

+0

@NullUserException bạn có giới hạn mức nào? Những kẻ tấn công sẽ sử dụng nhiều địa chỉ IP và sẽ cố gắng đăng ký nhiều tài khoản ... –

Trả lời

3

Chỉ cần gieo hạt giống với kẻ tấn công không biết:

md5(rand(0,1000).'helloworld234'); 

không có giới hạn như thế nào crasy bạn có thể đi

md5(md5(time().'helloguys'.rand(0,9999))); 

Way quá nhiều nhưng bạn có được ý tưởng.

+4

entropy hơn, càng tốt. Tôi sẽ đặt ít nhất ID người dùng hoặc email của người đăng ký, cùng với thời gian cho độ chính xác cao nhất có thể. –

+3

@ John Well tôi đã dạy cho thấy một số hạt giống được tạo ra từ spin của một nguyên tử nhưng bạn biết chi phí và tất cả điều đó. – Iznogood

+0

rand() là khủng khiếp và không bao giờ nên được sử dụng để bảo mật, mt_rand() là tốt hơn. Ngoài ra kẻ tấn công biết thời gian(), anh ta là người tạo tài khoản. – rook

1

rand (1,1000) là 10 bit entropy. MD5ing nó không thêm gì cả. Trung bình sẽ mất 500 lần để kẻ tấn công xác minh tài khoản. Không giới hạn tốc độ sẽ giúp bạn, vì những kẻ tấn công có kỹ năng sẽ thuê hoặc đã sở hữu một botnet sẽ được sử dụng để xác thực tài khoản.

Phát an toàn và có 128 bit entropy trong liên kết xác minh của bạn. Trong PHP openssl_random_pseudo_bytes(16, true) là cách di động để nhận các byte ngẫu nhiên mã hóa mạnh mẽ, nhưng nếu bạn lưu trữ dưới một số bản phân phối Linux hoặc một trong BSD OS, đọc/dev/urandom cũng là một lựa chọn chấp nhận được.

Ngoài ra đặt câu hỏi về sự khôn ngoan của việc xác minh tài khoản, nhiều người sử dụng email không dùng một lần chính xác cho điều đó (và không có danh sách đen của bạn sẽ không bao giờ được cập nhật).

+0

Giảm giá tốt mà không có lý do ... –