Trong suốt chương này, chúng ta sẽ luôn tạo một ứng dụng mẫu trong đó một thư mục nhất định phải được bảo vệ bằng tên người dùng và mật khẩu. Có ba cách tiếp cận để hoàn thành nhiệm vụ này
Sử dụng xác thực HTTP với Apache
Sử dụng xác thực HTTP với PHP
Sử dụng phiên PHP
Các tệp cần thiết cho các phần được bảo mật này của trang web sẽ được đặt trong các thư mục được bảo vệ1, được bảo vệ2 và được bảo vệ3 tương ứng
Tại sao?
Tạo xác thực người dùng đơn giản khá dễ dàng, chỉ cần cho phép người dùng cung cấp cho bạn tên người dùng và mật khẩu. Nếu khớp với các giá trị chính xác, "thông tin bí mật" sẽ được tiết lộ, như trong Liệt kê 11. 1
Liệt kê 11. 1. Tập lệnh xác thực người dùng đơn giảnUser Authentication Welcome! Here is the truth about the JFK assassination ... Please log in! User name:
Password:
Hầu hết các lược đồ xác thực khác hoạt động theo cách này. Nhưng tại sao đoạn mã trước không phù hợp với hầu hết các trang web? . Hầu hết các cơ chế bảo vệ khác hoạt động cho toàn bộ thư mục
Sử dụng xác thực HTTP với Apache
Máy chủ Web Apache cung cấp quyền kiểm soát truy cập vào trang web bằng tệp có tên. htaccess. Trong tệp này, bạn có thể cung cấp thông tin về những người có thể truy cập trang web [hoặc thư mục hiện tại và các thư mục con của nó, nếu bạn đặt tệp trong thư mục con của máy chủ Web], trong số những thứ khác
Tập tin. htaccess là một tệp văn bản nơi bạn có thể cung cấp một số tùy chọn cấu hình. Trước tiên, bạn phải cung cấp tên cho khu vực hạn chế
AuthName "PHP 5 Unleashed Protected Area"
Ngoài ra, loại xác thực phải được cung cấp;
AuthType Basic
Các loại xác thực khác có sẵn, đáng chú ý nhất là xác thực thông báo, tuy nhiên, không được hỗ trợ bởi các phiên bản Internet Explorer cũ cũng như các phiên bản gần đây của Netscape
Hơn nữa, bạn phải cho Apache biết vị trí của tệp có thông tin xác thực người dùng [tên, mật khẩu]
AuthUserFile /path/to/users
Chúng tôi sẽ bao gồm tệp người dùng này sau một phút
Ngoài ra, bạn cần cho Apache biết những người dùng nào được phép trên trang web của bạn. Một khởi đầu tốt là cho phép tất cả người dùng được xác định trong tệp người dùng
require valid-user
Điều này kết luận các tập tin. htaccess; . 2 là mã hoàn chỉnh
Liệt kê 11. 2. Một. tập tin htaccessAuthName "PHP 5 Unleashed Protected Area" AuthType Basic require valid-user AuthUserFile /path/to/users
Trên Windows, các tệp chỉ bao gồm phần mở rộng [chẳng hạn như. htaccess] không được phép, vì vậy bạn không thể sử dụng. tập tin htaccess ở đó. Tuy nhiên, nếu bạn muốn phát triển trên máy Windows nhưng máy chủ Web là máy Unix/Linux thì chỉ cần tạo một tệp ht. truy cập [hoặc bất kỳ tên nào khác], sao chép nó vào máy chủ Web của bạn và đổi tên nó thành. htaccess.
Tuy nhiên, nếu bạn muốn sử dụng phiên bản Windows của Apache, hãy tìm kiếm dòng sau trong httpd của Apache. tập tin conf
AccessFileName .htaccess
Thay đổi dòng này thành lệnh này
AccessFileName ht.access
Bây giờ, tất cả các tệp có tên ht. truy cập sẽ được coi là tệp kiểm soát truy cập. Lưu ý rằng bạn phải khởi động lại máy chủ Web trước khi những thay đổi này có hiệu lực
Trong bước tiếp theo, bạn phải tạo tệp người dùng. Cái này chứa các dòng trông như thế này
________số 8Mỗi dòng chứa tên người dùng và mật khẩu được mã hóa, được liên kết, được phân tách bằng dấu hai chấm. Nhưng đừng lo lắng, bạn không phải tự mình thực hiện việc mã hóa này. Với Apache, có một công cụ hữu ích gọi là htpasswd để tạo tệp mật khẩu này [có sẵn ngay cả trong Windows, trong thư mục con bin, trong khi trên các hệ thống Linux, nó thường nằm trong /usr/local/apache/bin hoặc bất cứ nơi nào các tệp nhị phân Apache được lưu trữ]. Cú pháp cho htpasswd là thế này
htpasswd [options] password_file username [password]
Thông tin chi tiết hơn về chương trình này có sẵn khi bạn gọi htpasswd mà không cần tham số. Nhưng hiện tại, điều quan trọng cần biết là công tắc c tạo tệp người dùng mới. Nếu bạn bỏ qua tham số này, một người dùng mới sẽ được thêm vào tệp hiện có. Công tắc m sử dụng định dạng MD5 [nhân tiện, đây là tiêu chuẩn trên nền tảng Windows]. Đây là một giao thức để thêm ba người dùng vào một tệp người dùng mới
AuthName "PHP 5 Unleashed Protected Area"0
Bây giờ hãy đặt tất cả các tệp trong thư mục protected1, tệp người dùng vào thư mục bạn đã cung cấp trong. tập tin htaccess. Cố gắng truy cập một tài liệu trong vòng protected1; . Nếu không, bạn phải yêu cầu Apache tìm kiếm và phân tích cú pháp. tập tin htaccess. Thay thế
AuthName "PHP 5 Unleashed Protected Area"1
với
AuthName "PHP 5 Unleashed Protected Area"2
trong httpd. conf và khởi động lại máy chủ Web của bạn. Hình 11. 1 hiển thị lời nhắc của trình duyệt về thông tin đăng nhập của người dùng
Hình 11. 1. Người dùng được nhắc nhập tên và mật khẩuCác. cách htaccess hoạt động tốt, nhưng có hai lỗi lớn
Nó bị hạn chế đối với máy chủ Web Apache
Thêm người dùng nhanh chóng là một nhiệm vụ tẻ nhạt hoặc htpasswd phải được gọi bằng shell_exec[] hoặc system[] hoặc mật khẩu phải được mã hóa thủ công bằng hàm crypt[] của PHP để tự động hóa quy trình
Máy chủ Web IIS của Microsoft cũng hỗ trợ xác thực cơ bản; . Trong hầu hết các trường hợp, điều này là không phù hợp;
Sử dụng xác thực HTTP
Tiêu đề của phần này hơi gây hiểu nhầm, chúng tôi cũng đã sử dụng xác thực HTTP trong phần trước, mặc dù với một chút trợ giúp từ. tập tin htaccess. Trong phần này, chúng tôi sẽ sử dụng một cơ chế tương tự, nhưng chúng tôi sẽ không dựa vào các tệp người dùng vụng về và. cài đặt htaccess. Lần này, chúng tôi sẽ kiểm tra tên người dùng và mật khẩu trong mã PHP
Để làm như vậy, bạn phải gửi một số tiêu đề HTTP đặc biệt tới trình duyệt Web
AuthName "PHP 5 Unleashed Protected Area"3
Mã trạng thái HTTP 401 là viết tắt của "Không được ủy quyền"; . Tùy thuộc vào loại trình duyệt, điều này có thể được thực hiện vô số lần [trình duyệt Netscape] hoặc ba lần cho đến khi một trang lỗi được hiển thị [Internet Explorer]
Để các ví dụ tiếp theo hoạt động, PHP phải được chạy dưới dạng mô-đun, không phải ở chế độ CGI. Chế độ CGI sẽ được đề cập sau trong phần này
Mảng $_SERVER chứa các giá trị PHP_AUTH_USER và PHP_AUTH_PW, chứa tên người dùng và mật khẩu mà người dùng đã nhập trong cửa sổ trình duyệt phương thức. Đoạn mã sau kiểm tra xem $_SERVER["PHP_AUTH_USER"] đã được đặt chưa; . Nếu không, các mục tiêu đề được gửi để người dùng được nhắc cung cấp tên người dùng và mật khẩu, như trong Liệt kê 11. 3 [trang sau khi đăng nhập thành công được mô tả trong Hình 11. 2]
Liệt kê 11. 3. Tên người dùng và mật khẩu được in raAuthName "PHP 5 Unleashed Protected Area"4
Hình 11. 2. Người dùng hiện đã đăng nhập.
Tuy nhiên, khi bạn cố gắng chạy tập lệnh này trong IIS, bạn sẽ rơi vào một vòng lặp vô tận, bạn luôn được nhắc nhập mật khẩu của mình; . Điều này bị bỏ qua bởi phần lớn các tài liệu về PHP
Liệt kê 11. 4 hiển thị một phiên bản khác của tập lệnh. Lần này, một biến máy chủ HTTP_AUTHORIZATION được kiểm tra và in, nếu có
Liệt kê 11. 4. Tập lệnh này được thiết kế riêng cho IIS của MicrosoftAuthName "PHP 5 Unleashed Protected Area"4
Bạn lại được nhắc nhập tên người dùng và mật khẩu. Sau đó, nội dung của biến HTTP_AUTHORIZATION được hiển thị [xem Hình 11. 3]
Hình 11. 3. Giá trị của HTTP_AUTHORIZATION [trên IIS]Để điều này hoạt động, PHP phải chạy dưới dạng mô-đun ISAPI trong IIS và bạn phải cài đặt php5isapi. dll dưới dạng bộ lọc ISAPI trong bảng điều khiển dành cho quản trị viên IIS [xem Hình 11. 4]. Ngoài ra, bạn phải tắt xác thực Windows trong bảng điều khiển quản lý IIS
Hình 11. 4. Cài đặt bộ lọc ISAPI PHPBạn thấy rằng giá trị của HTTP_AUTHORIZATION bắt đầu bằng Cơ bản, sau đó là một khoảng trống, sau đó là một số rác. Tuy nhiên, nếu để ý kỹ, bạn sẽ thấy các ký tự sau Basic có thể là văn bản được mã hóa Base64. Do đó, hãy thay đổi danh sách trước đó thành mã được hiển thị trong Liệt kê 11. 5 [kết quả có thể được nhìn thấy trong Hình 11. 5]
Liệt kê 11. 5. Sử dụng base64_decode[], Dữ liệu người dùng có thể đọc đượcAuthName "PHP 5 Unleashed Protected Area"4
Hình 11. 5. Bây giờ tên người dùng và mật khẩu có thể đọc được.
Như có thể thấy từ Hình 11. 5, nội dung của HTTP_AUTHORIZATION [sau Cơ bản] có cấu trúc như sau, nếu giải mã Base64
AuthName "PHP 5 Unleashed Protected Area"7
Vì vậy, để truy xuất tên người dùng và mật khẩu cho cả Apache và IIS, đoạn mã sau [xem Liệt kê 11. 6] có ích
Liệt kê 11. 6. Tên người dùng và mật khẩu được truy xuất cho cả Apache và IISAuthName "PHP 5 Unleashed Protected Area"4
Vì trình duyệt Web lưu trữ tên người dùng và mật khẩu miễn là trình duyệt chưa đóng hoàn toàn, hãy đảm bảo đóng trình duyệt sau mỗi ví dụ để bạn bắt đầu làm mới mà không cần bất kỳ người dùng nào . Nếu không, bạn có thể không nhìn thấy cửa sổ bật lên cho thông tin đăng nhập của người dùng vì chúng đã được gửi tự động.
Sử dụng tên người dùng và mật khẩu tĩnh
Sử dụng mã này làm cơ sở, xác thực HTTP có thể được triển khai khá dễ dàng. Trong Liệt kê 11. 7, khu vực bí mật được bảo vệ bằng một tổ hợp tên người dùng/mật khẩu. php5/iscool
AuthName "PHP 5 Unleashed Protected Area"4
Chỉ khi người dùng nhập đúng thông tin đăng nhập, tiêu đề HTTP trái phép 401 mới không được gửi tới máy khách. Để bảo vệ một trang web, chỉ cần đưa tệp trước đó vào tất cả các trang bạn muốn bảo mật
Ngoài ra, bạn có thể sử dụng cài đặt auto_prepend_file trong php. ban đầu
Tất nhiên, mã này có thể dễ dàng mở rộng. Chẳng hạn, bạn có thể có toàn bộ danh sách tên người dùng và mật khẩu hợp lệ. Hãy tưởng tượng một tệp chứa tên người dùng và mật khẩu [được mã hóa] ở định dạng này
AuthType Basic0
Việc mã hóa được thực hiện bằng hàm crypt[] của PHP. Là tham số đầu tiên, mật khẩu được gửi;
Tập lệnh PHP sau [xem Liệt kê 11. 8 và Hình 11. 6] cho phép quản trị viên nhập tên người dùng và mật khẩu và ghi mục nhập được liên kết vào tệp mật khẩu, sử dụng crypt[]
Liệt kê 11. 8. Mật khẩu được mã hóa và lưu trong một tệpAuthType Basic1
Hình 11. 6. Người dùng có thể được thêm vào người dùng. tập tin txt.
Ví dụ này được giữ càng dễ càng tốt; . Trong một ứng dụng trong thế giới thực, bạn phải bảo mật tập lệnh này để chỉ bạn mới có quyền truy cập vào nó. Hơn nữa, không phải tất cả người dùng đều có thể đọc được tệp người dùng/mật khẩu;
Ngay sau khi một số người dùng được thêm vào, đã đến lúc tạo một tập lệnh kiểm tra xem tên người dùng và mật khẩu đã cho có tồn tại trong tệp đó hay không, nếu hệ thống biết người dùng đó
Để làm như vậy, tên người dùng và mật khẩu được cung cấp bằng xác thực HTTP được truy xuất như được hiển thị trước đó. Sau đó, tệp người dùng được phân tích cú pháp cho tổ hợp tên người dùng/mật khẩu này. Nếu thành công, người dùng được cấp quyền truy cập. Liệt kê 11. 9 hiển thị mã hoàn chỉnh, hoạt động trên cả Apache và IIS
Liệt kê 11. 9. Tên người dùng và mật khẩu được kiểm tra đối với dữ liệu trong tệpAuthName "PHP 5 Unleashed Protected Area"4
Một sai lầm dễ dàng. Hãy nhớ rằng fgets[] đọc dữ liệu cho đến cuối dòng, bao gồm cả "\n" ở cuối. Do đó, bạn phải xóa ký tự này bằng hàm rtrim[] của PHP.
Sử dụng tên và mật khẩu từ cơ sở dữ liệu
Bạn càng có nhiều người dùng, giải pháp dựa trên tệp này sẽ càng kém hiệu quả. Sau một thời gian, bạn sẽ muốn sử dụng cơ sở dữ liệu để lưu thông tin người dùng. Một lần nữa, hai tập lệnh được tạo. Đầu tiên, trang PHP trong Liệt kê 11. 10 cho phép bạn thêm người dùng vào cơ sở dữ liệu. Cơ sở dữ liệu được gọi là auth;
Liệt kê 11. 10. Mật khẩu được mã hóa và lưu trong cơ sở dữ liệuAuthType Basic1
Tập lệnh để kiểm tra các tổ hợp tên người dùng/mật khẩu đã gửi tương tự như ví dụ dựa trên tệp trước đó; . 11
Liệt kê 11. 11. Tên người dùng và mật khẩu được kiểm tra đối với dữ liệu trong cơ sở dữ liệuAuthName "PHP 5 Unleashed Protected Area"4
Ưu điểm chính của giải pháp này là giờ đây bạn không phải lo lắng về những thứ như khóa tệp và truy cập song song vào tệp người dùng. cơ sở dữ liệu txtthe tự động làm điều này cho bạn. Ngả lưng, thư giãn và để người dùng của bạn tự xác thực
Nếu sử dụng mô-đun Apache mod_auth_mysql, toàn bộ việc quản lý và kiểm tra tên người dùng thậm chí còn dễ dàng hơn. Mô-đun được viết bởi một trong những nhà phát triển chính của PHP, Zeev Suraski ["Ze" trong Zend]. Tính đến thời điểm viết bài, nó có sẵn tại http. //www. mysql. com/cổng thông tin/phần mềm/mục-241. html, nhưng nó chỉ hoạt động trên Unix/Linux. Tệp SỬ DỤNG chứa thông tin về cài đặt, chuẩn bị cơ sở dữ liệu MySQL và kết hợp mô-đun vào máy chủ Web Apache của bạn
Sử dụng phiên PHP
Tất cả các phương pháp được trình bày trước đây đều có hai sai sót lớn
- Họ yêu cầu bạn có một số quyền nhất định trên máy chủ Web của mình, điều này không đúng với nhiều gói dịch vụ lưu trữ
- Chúng không hoạt động ở chế độ CGI;
Một điều luôn hoạt động là sử dụng các phiên PHP. Thông tin về việc người dùng có được xác thực hay không được lưu trong biến phiên. Nhờ quản lý phiên của PHP, thông tin này sau đó có sẵn trên tất cả các trang của ứng dụng Web
Các chức năng xử lý phiên của PHP được đề cập rất chi tiết trong Chương 6, "Dữ liệu liên tục sử dụng phiên và cookie. "
Trước khi bạn bắt đầu, hãy kiểm tra xem tất cả thông tin liên quan đến phiên trong php. ini được thiết lập
Đường dẫn nơi dữ liệu phiên được ghi phải tồn tại và có thể ghi được cho PHP [session_save_path]
Đặt phiên. user_cookies thành 1 để PHP luôn cố gắng đặt cookie với ID phiên. Điều này làm cho ứng dụng an toàn hơn. Đừng lo lắng nếu khách hàng không chấp nhận cookie;
Nếu bạn cần xác thực dựa trên phiên trên tất cả các trang trên trang web của mình, hãy đặt phiên. auto_start thành 1. Nếu bạn chỉ cần xác thực này trên một số trang của mình, bạn chỉ nên bắt đầu phiên trên các trang thực sự dựa vào nó, sử dụng session_start[]
Một lần nữa, chúng tôi bắt đầu sử dụng một ví dụ đơn giản trong đó chỉ có một kết hợp tên người dùng/mật khẩu hợp lệ. Tên người dùng biến phiên sẽ chứa tên người dùng của người dùng hiện đang đăng nhập. Nếu biến này không tồn tại, người dùng chưa đăng nhập. Ngược lại, nếu biến tồn tại thì người dùng đã đăng nhập thành công
Nếu biến phiên không tồn tại, một biểu mẫu sẽ được hiển thị nơi người dùng có thể nhập tên và mật khẩu được liên kết
AuthType Basic5
Sau khi người dùng gửi biểu mẫu HTML, tên và mật khẩu sẽ được kiểm tra. Nếu thông tin đăng nhập ổn, người dùng đã đăng nhập. Bạn không được quên rằng bạn phải đặt biến phiên để lưu trạng thái "đã đăng nhập" này. Liệt kê 11. 12 chứa mã hoàn chỉnh cho trang đăng nhập
Liệt kê 11. 12. Một trang đăng nhập đơn giảnAuthType Basic6
Điều này hoạt động tốt;
Đây là nơi một thủ thuật tiện lợi khác xuất hiện. Khi liên kết với biểu mẫu đăng nhập, chúng tôi gửi phần sau như một phần của URL nơi người dùng đến. http. //tên máy chủ/đăng nhập. php?url=/path/to/origin. php. Tuy nhiên, nếu giá trị này không được đặt, người dùng sẽ được chuyển hướng đến chỉ mục tệp. php
Thật không may, cách tiếp cận đơn giản này tạo ra một số khó khăn, tùy thuộc vào cấu hình PHP của bạn. Nếu bạn đặt PHP không sử dụng cookie và/hoặc nếu người dùng không chấp nhận cookie cho các phiên, bạn phải thêm thông tin phiên vào URL theo cách thủ công. Bạn cần hai hàm PHP cho điều đó
session_name[] trả về tên của phiên PHP [ví dụ: "PHPSESSID"]
session_id[] trả về ID phiên [ví dụ: "18143b51ee37ac73cea81cd19ba20f2c"]
Điều này dẫn đến ba trường hợp
Nếu cookie phiên tồn tại, nghĩa là nếu $_COOKIE[session_name[]] được đặt, thì người dùng chỉ được chuyển hướng
Nếu không tồn tại cookie phiên, thông tin phiên phải được thêm vào URL. Đầu tiên, nó được kiểm tra để xác định xem URL đã chứa dấu hỏi chưa. Nếu vậy, "&". tên_phiên[]. "=". session_id[] được thêm vào [ví dụ: "&PHPSESSID=18143b51ee37ac73cea81cd19ba20f2c"]
Nếu không có cookie phiên nào tồn tại và URL chuyển hướng cũng không chứa dấu chấm hỏi, thì "?". tên_phiên[]. "=". session_id[] được thêm vào [ví dụ: "?PHPSESSID=18143b51ee37ac73cea81cd19ba20f2c"]
Điều này dẫn đến đoạn mã sau
AuthType Basic7
Phần còn lại của mã là thủ tục tiêu chuẩn. Một biểu mẫu HTML chấp nhận tên người dùng và mật khẩu. Khi gửi biểu mẫu này, thông tin này sẽ được kiểm tra đối với "php5"/"iscool". Khi thành công, URL chuyển hướng được xác định. $_GET["src"] được đặt hoặc giá trị tiêu chuẩn, "chỉ mục. php", được sử dụng
Liệt kê 11. 13 là mã hoàn chỉnh cho trang đăng nhập
Liệt kê 11. 13. Một trang đăng nhập phức tạp hơnAuthType Basic8
Cuối cùng, bạn cần mã kiểm tra thông tin phiên. Nếu $_SESSION["username"] được đặt thì không cần thực hiện hành động nào. Tuy nhiên, nếu người dùng chưa đăng nhập, người dùng phải được chuyển hướng đến trang đăng nhập. Tên của tập lệnh hiện tại [$_SERVER["SCRIPT_NAME"]] được gửi tới tập lệnh này dưới dạng biến URL GET. Liệt kê 11. 14 là mã. Hình 11. 7 hiển thị kết quả trong trình duyệt Web
Liệt kê 11. 14. Nếu người dùng chưa đăng nhập, biểu mẫu đăng nhập sẽ được tảiAuthName "PHP 5 Unleashed Protected Area"4
Hình 11. 7. Trang đăng nhậptrang giới thiệu được coi là một phần của URL.
Trong phần này, chúng tôi sẽ tạo một số trang đăng nhập. Nếu bạn muốn sử dụng cái này hay cái khác, bạn phải đổi tên tệp bạn muốn đăng nhập. php để nó được gọi tự động bởi đoạn mã trước
Để sử dụng nó, bạn có hai khả năng
Bao gồm mã trước ở đầu mỗi trang PHP mà bạn muốn bảo vệ, trước khi bất kỳ đầu ra HTTP nào được gửi [cần thiết để xử lý phiên]. Bạn có thể sử dụng bao gồm [], yêu cầu [] hoặc request_once []
Bao gồm mã này cho tất cả các tệp, sử dụng auto_prepend_file trong php. ban đầu. Tuy nhiên, trước khi bạn làm điều đó, hãy mở rộng mã để nó kiểm tra xem nó có được gọi trên trang có tên là đăng nhập không. phptrang đăng nhập phải được truy cập mà không cần cung cấp mật khẩu
Sơ đồ này hiện có thể được áp dụng cho hai phương pháp quản lý mật khẩu khác. Đầu tiên, chúng tôi sử dụng tệp văn bản nơi lưu trữ tất cả tên người dùng và mật khẩu [crypt[]-được mã hóa] được liên kết. Mã nguồn để thêm người dùng vào tệp này không thay đổi so với mã từ phần trước, vì định dạng tệp không thay đổi. Tuy nhiên, điều thay đổi là mã kiểm tra thông tin này. Logic mã này sẽ được đưa vào thông tin đăng nhập. tập tin php. Nếu một mục liên quan được tìm thấy trong tệp người dùng/mật khẩu, biến phiên được đặt tương ứng. Liệt kê 11. 15 là mã hoàn chỉnh cho trang này
Liệt kê 11. 15. Thông tin đăng nhập được đọc từ một tệpAuthType Basic8
Sử dụng tên người dùng và mật khẩu từ cơ sở dữ liệu
Nếu bạn có sẵn MySQL, bạn có thể và bạn nên lưu trữ người dùng của mình trong cơ sở dữ liệu. Điều này làm cho việc xử lý người dùng [bao gồm thêm, sửa đổi và thậm chí xóa] dễ dàng hơn nhiều
Không chắc chắn MySQL là gì hoặc làm thế nào để sử dụng nó?
Cấu trúc cơ sở dữ liệu đã được giải thích trước đó về cơ bản, các cột user và pass chứa tên người dùng và mật khẩu liên quan, mật khẩu sau được mã hóa bằng hàm crypt[] của PHP. Đoạn mã này đọc thông tin này và so sánh nó với tên người dùng và mật khẩu được cung cấp
AuthUserFile /path/to/users1
Phần còn lại của mã giống như trước đây. Biến phiên được đặt; . Nếu cần, tên và ID của phiên PHP hiện tại sẽ được thêm thủ công vào URL
Liệt kê 11. 16 là mã hoàn chỉnh cho trang đăng nhập do MySQL điều khiển
Liệt kê 11. 16. Thông tin đăng nhập được tải từ cơ sở dữ liệuAuthType Basic8
Phương pháp này hoàn toàn không bị hạn chế đối với cơ sở dữ liệu MySQL. Với rất ít thay đổi đối với mã, mã này có thể được điều chỉnh phù hợp với PostgreSQL, MSSQL hoặc bất kỳ nguồn dữ liệu nào khác. Nếu bạn đang sử dụng PEAR. lớp DB, tác vụ này sẽ bị giới hạn trong việc thay đổi một dòng trong mã nơi bạn cung cấp thông tin về dữ liệu kết nối cho cơ sở dữ liệu.