PHP

PHP | HTTP Authentication Basic

Thông thường khi truy cập vào website nếu bạn muốn xác thực người dùng trước khi truy cập vào hệ thống thì sẽ tạo trang login để user xác thực. Ngoài cách đó thì ta còn có có thêm một cách xác thực nữa đó là HTTP Authentication Basic.

1. Giới thiệu

Dễ hình dung thì có thể bạn đã đã bắt gặp hình sau khi vào một hệ thống website có yêu cầu bảo mật như:

Hoặc khi bạn request đến page và nhận được yêu cầu cần xác thực bằng Authorization Basic Header thì đó chính là khi hệ thống áp dụng HTTP Authentication Basic.

2. Cách hoạt động

Như hình trên khi client request đến server và server chưa nhận được Authorization Header thì nó sẽ response về 401 Unauthorized đồng thời show popup để user đăng nhập và khi client nhập đúng thông tin xác thực hoặc nếu bạn request page bằng code có đính kèm request header Authorization: Basic [base64_encode(‘username:pwd’)] thì sẽ xác thực thành công.

3. Làm thế nào

Đầu tiên bạn cần biết là việc xác thực này có thể áp dụng cho từng cấp thư mục riêng biệt thông qua file .htaccess .

Ví dụ web của bạn có cây thư mục như sau:

+ /var/www/web1/.htaccess
+ /var/www/web1/folder1/.htaccess
+ /var/www/web1//folder2/.htaccess

Lúc đó mặc dù bạn đã authorized ở cấp ngoài cùng là /web1 rồi nhưng khi truy cập vào cấp con /folder1 hay /folder2 thì bạn cần phải xác thực lại ứng với việc bạn setup HTTP Authentication Basic ở từng cấp file .htaccess .

OK, bây giờ là cách config.

3.1 Tạo file .htaccess

Bạn nhúng đoạn code sau

AuthType Basic
AuthName "Your_auth_name(any)"
AuthUserFile /path/to/file/.htpasspwd
Require valid-user

Ở đoạn trên bạn cần thay thế những chỗ sau:

+ AuthName : Nhập tên bất kỳ bạn muốn vào đây.
+ AuthUserFile: Nhập đường dẫn tuyệt đối đến file .htpasswd (nơi chứa danh sách valid user&pwd).

vd:

AuthType Basic
AuthName "Auth for dev site"
AuthUserFile /var/www/htdocs/.htpasswd
Require valid-user

3.2 Tạo file .htpasswd

Trong file này sẽ là nơi khai báo danh sách user được phép truy cập vào hệ thống.

File này bạn cần đặt tại đúng đường dẫn mà bạn đã khai báo ở bước mục [AuthUserFile] tại 3.1.

Lưu ý bạn không nên đặt file này tại folder source của mình mà nên đặt tại nơi nào đó tại server.

Và đây là nội dung của file

user_name_1:user_pwd_1
user_name_2:user_pwd_2

Trong đó:

+ Mỗi user tương ứng với một dòng.
+ user_name và password cách nhau bởi dấu “:” .

Với password để tạo ta làm như sau:

Tại terminal bạn nhập lệnh sau:

Htpasswd –c [/path/to/file/.htpasspwd] [username]

Trong đó:
+ [/path/to/file/.htpasspwd]: là đường dẫn đến file .htpasswd cần tạo username&pwd.
+ [username]: là tên user mà bạn muốn tạo hoặc thay đổi.
+ -c : là trường hợp tạo mới file .htpasswd theo path đã chỉ định và sẽ tạo mới username mà bạn đã đặt. Nếu có file này rồi thì nó cứ tạo mới đè lên cái cũ nên nếu chạy -c thì lúc nào trong file .htpasswd cũng chỉ tồn tại một username. Trường hợp muốn tạo nhiều usernames trong file hoặc muốn cập nhật lại pwd cho username đã tồn tại thì bạn thì bạn chỉ cần bỏ -c là được.

Sau khi chạy lệnh thì nó sẽ yêu cầu bạn nhập New-Password và Confirm-New-Pwd.

Username & Password sau khi tạo

**Chú ý: Nếu bạn chạy Apache trên Window bằng Xampp thì có thể làm theo như sau:

Sau khi nhấn vào Shell từ Xampp

Tại đây bạn cứ thao tác lệnh bên trên để tạo pwd.

Ngoài ra còn cách nữa để tạo pwd là bạn có thể nhờ đến trang tạo pwd online bằng keyword “HTPasswd Generator”, những trang đó giúp ta tạo ra pwd cũng y như các cách trên vậy 🙂

OK đến đây thì ta đã tạo ra được một HTTP Authentication Basic cho server của chúng ta rồi 🙂

4. Tham khảo

https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication

https://www.wpwhitesecurity.com/htpasswd-tutorial-create-an-apache-password-file/

Leave a Reply

Your email address will not be published. Required fields are marked *