2010-01-11 37 views
7

Tôi khá mới đối với PHP và đang tìm kiếm một số phương pháp hay nhất về cách triển khai xác thực trong PHP.Cách tốt nhất để tạo trang đăng nhập PHP là gì?

Tôi là nhà truyền giáo cho Adobe và một trong những điều khiến tôi khó chịu là khi mọi người sử dụng Flex/Flash cho màn hình đăng nhập. Vì vậy, tôi muốn làm một bài đăng trên blog/ví dụ về việc sử dụng trang đăng nhập HTML/PHP và sau đó chuyển thông tin phiên sang Flex-sau- phiên đã được đặt.

Tôi vẫn sắp xếp chính xác những gì PHP cần để tạo phiên hợp lệ và cách đặt cookie. Vì vậy, các ví dụ hoặc thông tin cụ thể liên quan đến điều đó sẽ rất hữu ích.

Cảm ơn trước,

= Ryan [email protected]

+0

Bạn có thể muốn xem https://github.com/delight-im/PHP-Auth, đó là cả kiến ​​thức bất khả tri về khung và thuyết bất khả tri. – caw

Trả lời

7

Như đã nói, có khá nhiều điều để tạo ra một hệ thống xác thực mạnh mẽ và an toàn trong PHP, nhưng các nguyên tắc cơ bản rất dễ nắm bắt.

Điều đầu tiên bạn muốn làm là gọi session_start(). Một khi bạn đã làm điều này bạn có thể nhận và thiết lập các biến session bằng cách sử dụng $_SESSION superglobal:

session_start(); 
$_SESSION['foo'] = $foo; 
$bar = $_SESSION['bar']; 

Một khi bạn đã làm điều này bạn có thể thiết lập đăng nhập chi tiết cho người dùng hiện khi một bản ghi thành công trong việc và họ đã kiên trì trên các trang (nhớ gọi session_start trước khi sử dụng chúng). Ngoài ra, session_start phải được gọi trước khi bất kỳ nội dung nào được gửi đến trình duyệt.

Có các vấn đề bảo mật cần xem xét, chẳng hạn như khắc phục phiên và trộm cắp cookie. Ví dụ, một cách tiếp cận với phiên làm việc phiên là tạo lại ID phiên của người dùng khi nâng cao đặc quyền bằng cách sử dụng session_regenerate_id của PHP (hoặc một cái gì đó tương tự).

PHP Security Consortium có nhiều thông tin hữu ích.

Cookie có thể được điều khiển bằng chức năng setcookie.

+0

Khi bạn nói "điều đầu tiên bạn muốn làm là gọi session_start()", bạn có nghĩa là tôi nên làm điều đó trước khi tôi kiểm tra thông tin đăng nhập? Có vẻ như đó là cách chính xác để triển khai và sau đó đăng nhập thành công, tôi sẽ thay đổi các biến phiên đó (giả sử thay đổi $ _SESSION ['logged_in'] từ false thành true). Đúng không? – ryanstewart

+0

Đúng, đúng vậy. Bạn không thể truy cập '$ _SESSION' mà không cần khởi tạo phiên đầu tiên; bạn phải làm điều này trên mọi trang. –

2

Đó là một chủ đề khá rộng. Tuy nhiên, hiểu biết tốt về phiên/cookie sẽ là cơ sở tốt. Bạn nên xem Chris Shiflett's blog - anh ấy có rất nhiều bài đăng hay về các chủ đề này.

Tôi là nhà truyền giáo cho Adobe và một trong những điều làm phiền tôi là khi mọi người sử dụng Flex/Flash cho màn hình đăng nhập. Vì vậy, tôi muốn làm một bài đăng trên blog/ví dụ về việc sử dụng trang đăng nhập HTML/PHP và sau đó chuyển thông tin phiên sang Flex-sau- phiên đã được đặt.

Tôi không hoàn toàn chắc chắn về mục tiêu của bạn tại đây. Bạn có cần thành phần Flash để xác thực người dùng không? Vì đây là một công nghệ phía máy khách, việc xác thực như vậy sẽ có phạm vi giới hạn.

+0

Trong nhiều trường hợp, Flash/Flex sẽ xử lý phiên và nói chuyện trực tiếp với PHP để xác thực. Vì vậy, điều tôi đang làm là sử dụng các móc HTML trong Trình phát Flash để lấy thông tin cookie/phiên "bình thường" sẽ được sử dụng trong trang đăng nhập PHP thông thường và chuyển cho Trình phát Flash để Trình phát có thể thực hiện các yêu cầu đã được xác thực đến máy chủ PHP. – ryanstewart

-9

Dump PHP và tham gia ASP.NET. Tất cả điều này đã được thực hiện, cùng với các chi tiết về bảo mật và thành viên. =)

+4

Lol nhận xét này là vô giá trị và chỉ rực lửa. Nhưng tôi nghĩ rằng anh ấy đã bỏ phiếu đủ cho bây giờ – Alfred

+0

Tôi muốn một người nào đó đã cho tôi lời khuyên "vô giá trị" khi tôi bắt đầu từ PHP năm trước. =) Bất kỳ ai cũng muốn một chồng tạp chí Kiến trúc sư PHP? Thật là xấu hổ khi đặt chúng vào lò sưởi. –

2

Tạo thông tin đăng nhập.trang php với một cái gì đó biểu mẫu như:

<form method="post" action="login.php"> 
<input type="text" name="username"> 
<input type="password" name="password"> 
<input type="submit" name="submLogin"> 
</form> 

sau đó thêm logic php của bạn:

<? 
if(isset($submLogin)) 
{ 
$username = $_POST['username']; 
$password = $_POST['password']; 

// run checks on vars not to pass on silly data + escape chars 

$query_login = 'SELECT * FROM users 
WHERE username = ' . $username . ' AND password = ' . $password . ' LIMIT 1'; 
$login = mysql_query($query_login, $db_connection) or die(); 
$login_result = mysql_num_rows($login); 

if($login_result == 1) 
{ 
    // success 
    session_start(); 
    $_SESSION['logged_in'] = TRUE; 
    // redirect somewhere, set cookies, do whatever you want to do on success 
} 
else 
{ 
    // fail 
    // display error or redirect 
} 
} 
?> 

$ db_connection biến là định danh liên kết - kết quả của mysql_connect() hoặc mysql_pconnect()

+1

Trực tiếp sử dụng tên người dùng và mật khẩu trong truy vấn SQL là cách rất không an toàn chống lại SQL injection. Bạn nên sử dụng ít nhất hàm htmlentities để xóa tên người dùng và mật khẩu trước khi sử dụng trong truy vấn SQL. Chỉ cần cho thông tin của bạn. – mdikici

+0

@subet Tôi vừa mới có một trong những khoảnh khắc "Ai đã viết điều này" khi tôi nhìn vào mã của tôi ở trên. Vâng, chắc chắn không làm những gì tôi đã làm trong câu trả lời của tôi và sanitize đầu vào. Sau đó, một lần nữa, nó được đề cập trong các ý kiến ​​(trong mã). – LukeP

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