2010-10-25 47 views
9

Tôi muốn tạo một hệ thống đăng nhập/đăng ký người dùng đơn giản bằng cách sử dụng PHP và mysql. Tôi không cần nhận bất kỳ thông tin nào ngoài những gì cần thiết để người dùng đăng nhập và đăng xuất. Tôi muốn đảm bảo rằng hệ thống được an toàn.Hệ thống Đăng nhập/Đăng ký với php và mysql

Cách mà tôi hiện đang hiểu nó như thế nào nên làm việc là:

Đăng ký

dùng nhập địa chỉ email của họ và mật khẩu và mật khẩu xác nhận.

Tập lệnh PHP đảm bảo mật khẩu khớp và email là địa chỉ hợp lệ và chưa có trong cơ sở dữ liệu.

Nó băm mật khẩu cùng với một muối ngẫu nhiên và lưu trữ muối và tạo ra mật khẩu băm trong cơ sở dữ liệu. (Chức năng md5 của php có phù hợp với điều này không? Tôi không chắc chắn về cách thức hoạt động của phần này.)

Lưu mã xác nhận email trong cơ sở dữ liệu và gửi địa chỉ email đã cho trở lại trang web chứa mã xác minh ?

Đăng nhập

tài nhập địa chỉ email và mật khẩu của họ.

Máy chủ tra cứu email trong cơ sở dữ liệu và truy xuất muối. Sau đó băm muối bằng mật khẩu mà người dùng vừa cung cấp để xem nó có khớp với mật khẩu trong cơ sở dữ liệu hay không.

Làm cách nào để làm cho phiên tồn tại sau khi đăng nhập. Với một phiên PHP? Một cookie? Điều gì sẽ được lưu trữ trong cookie để ghi nhớ người dùng giữa các lần truy cập?

Về cơ bản, tôi chỉ muốn xác minh rằng quy trình tôi mô tả là cách đăng ký/đăng nhập người dùng chính xác và an toàn. Ngoài ra, một số hướng dẫn hay có thêm thông tin là gì.

Trả lời

5

Chức năng md5 của php có phù hợp với điều này không?

MD5 không còn được coi là an toàn; hãy xem xét sử dụng băm mật khẩu tích hợp mới hơn của PHP với thuật toán bcrypt có độ phức tạp tính toán biến đổi: PHP password_hash()password_verify().

Làm cách nào để làm cho phiên tồn tại sau khi đăng nhập. Với phiên php? Một cookie? Điều gì sẽ được lưu trữ trong cookie để ghi nhớ người dùng giữa các lần truy cập?

Lý tưởng nhất, bạn sẽ sử dụng phiên PHP để duy trì trạng thái trong một lần truy cập và nếu bạn muốn có tùy chọn "nhớ thông tin đăng nhập của tôi", bạn sẽ sử dụng cookie chứa đủ thông tin để xác thực trả lại và khởi động lại phiên mới. Có một bài viết hay từ năm 2004 về các phương pháp hay nhất liên quan đến cookie đăng nhập tại đây: Persistent Login Cookie Best Practice. Bạn cũng có thể quan tâm đến giải pháp hiện đại hơn (2015) cho securely implementing "remember me" checkboxes.

Ngoài những điều này, tôi nghĩ rằng bất cứ điều gì bạn đã mô tả là tốt.

+0

Tôi chỉ muốn thêm rằng tôi đã tìm thấy câu trả lời hay về một câu hỏi khác về phần băm đặc biệt. http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords – Mike

1

Vì hệ thống đăng nhập là một phần không thể tách rời của một trang web, bạn bị vặn nếu nó bị tấn công. Trừ khi bạn đang làm điều này cho mục đích giáo dục, tôi khuyên bạn nên tìm một hệ thống được tạo ra bởi một người có kinh nghiệm trong lĩnh vực này. Bạn sẽ ngủ ngon vào ban đêm.

Ví dụ về hệ thống đăng nhập được tạo trước vững chắc là tank auth, được viết cho khuôn khổ Trình kích hoạt mã. Bạn có thể muốn xem làm thế nào anh chàng này thiết kế hệ thống để có được ý tưởng về những gì quan trọng nếu bạn quyết định viết của riêng bạn.

Cũng chỉ là một lưu ý từ kinh nghiệm, phải mất nhiều thời gian để viết hệ thống đăng nhập từ đầu hơn là tìm hiểu khung kích hoạt mã và cài đặt auth.

4

Một số lưu ý về một số cân nhắc còn thiếu:

Phiên PHP thường đã sử dụng cookie: ID phiên được lưu trữ dưới dạng một.

Phiên có thể bị tấn công; bạn cũng nên thực hiện các bước để giảm khả năng (bắt đầu bằng cách đọc "PHP: Preventing Session Hijacking with token stored as a cookie?" và "What is the best way to prevent session hijacking?").

Liên quan đến tấn công là fixing, nơi kẻ tấn công chọn ID phiên. Có hai cách để chống lại điều này: đặt session.use_only_cookies (mặc định bằng PHP> = 5.3) và thay đổi ID phiên khi người dùng đăng nhập bằng session_regenerate_id.

Đồng thời xem câu hỏi "PHP Session Security" và bài viết "PHP Security Guide: Sessions".

1

Dưới đây là đề xuất: xem xét sử dụng một khung có sẵn sẵn có cung cấp chức năng như vậy. chúng được thử và thử nghiệm. hãy xem Kohana. Nó có một mô-đun Auth có xác thực chăm sóc.

2

nếu bạn muốn có một giải pháp sẵn sàng làm

User Cake in php5

khá nhiều an toàn .. và ổn định.

+1

UserCake có hỗ trợ cookie để nhớ chức năng của tôi không? –

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