Trong ngữ cảnh của một giao dịch HTTP, xác thực truy cập cơ bản là một phương thức dành cho tác nhân người dùng HTTP (e. g. trình duyệt web) để cung cấp tên người dùng và mật khẩu khi thực hiện yêu cầu. Trong xác thực HTTP cơ bản, một yêu cầu chứa trường tiêu đề ở dạng Authorization: Basic, trong đó thông tin đăng nhập là mã hóa ID và mật khẩu Base64 được nối với nhau bằng dấu hai chấm :
Ban đầu nó được triển khai bởi Ari Luotonen tại CERN vào năm 1993 và được định nghĩa trong HTTP 1. 0 thông số kỹ thuật năm 1996. Nó được chỉ định trong RFC 7617 từ năm 2015, RFC 2617 từ năm 1999 đã lỗi thời
Đặc điểm[sửa]
Triển khai xác thực cơ bản HTTP (BA) là kỹ thuật đơn giản nhất để thực thi kiểm soát truy cập vào tài nguyên web vì nó không yêu cầu cookie, mã định danh phiên hoặc trang đăng nhập;
Bảo mật[sửa]
Cơ chế BA không cung cấp bảo vệ cho thông tin đăng nhập được truyền. Chúng chỉ được mã hóa bằng Base64 khi truyền và không được mã hóa hoặc băm theo bất kỳ cách nào. Do đó, xác thực cơ bản thường được sử dụng cùng với HTTPS để cung cấp tính bảo mật
Vì trường BA phải được gửi trong tiêu đề của mỗi yêu cầu HTTP, trình duyệt web cần lưu thông tin xác thực vào bộ nhớ cache trong một khoảng thời gian hợp lý để tránh liên tục nhắc người dùng nhập tên người dùng và mật khẩu của họ. Chính sách lưu trữ khác nhau giữa các trình duyệt
HTTP không cung cấp phương thức để máy chủ web hướng dẫn máy khách "đăng xuất" người dùng. Tuy nhiên, có một số phương pháp để xóa thông tin đăng nhập được lưu trong bộ nhớ cache trong một số trình duyệt web nhất định. Một trong số đó đang chuyển hướng người dùng đến một URL trên cùng một miền, sử dụng thông tin đăng nhập cố ý không chính xác. Tuy nhiên, hiện tượng này không nhất quán giữa các trình duyệt và phiên bản trình duyệt khác nhau. Microsoft Internet Explorer cung cấp một phương pháp JavaScript chuyên dụng để xóa thông tin xác thực được lưu trong bộ nhớ cache
Trong các trình duyệt hiện đại, thông tin đăng nhập được lưu trong bộ nhớ cache để xác thực cơ bản thường bị xóa khi xóa lịch sử duyệt web. Hầu hết các trình duyệt cho phép người dùng chỉ xóa thông tin đăng nhập cụ thể, mặc dù tùy chọn này có thể khó tìm và thường xóa thông tin đăng nhập cho tất cả các trang web đã truy cập
Giao thức [ chỉnh sửa ]
Phía máy chủ[sửa]
Khi máy chủ muốn tác nhân người dùng tự xác thực với máy chủ sau khi nhận được yêu cầu chưa được xác thực, nó phải gửi phản hồi với dòng trạng thái HTTP 401 trái phép và trường tiêu đề WWW-Authenticate
Trường tiêu đề WWW-Authenticate để xác thực cơ bản được xây dựng như sau
WWW-Authenticate: Basic realm="User Visible Realm"
Máy chủ có thể chọn bao gồm thông số bộ ký tự từ RFC 7617
WWW-Authenticate: Basic realm="User Visible Realm", charset="UTF-8"
Tham số này cho biết rằng máy chủ mong đợi máy khách sử dụng UTF-8 để mã hóa tên người dùng và mật khẩu (xem bên dưới)
Phía khách hàng[sửa]
Khi tác nhân người dùng muốn gửi thông tin xác thực đến máy chủ, nó có thể sử dụng trường tiêu đề Ủy quyền
Trường tiêu đề ủy quyền được xây dựng như sau
- Tên người dùng và mật khẩu được kết hợp với một dấu hai chấm (. ). Điều này có nghĩa là bản thân tên người dùng không được chứa dấu hai chấm
- Chuỗi kết quả được mã hóa thành chuỗi octet. Theo mặc định, bộ ký tự được sử dụng cho mã hóa này không được chỉ định, miễn là nó tương thích với US-ASCII, nhưng máy chủ có thể đề xuất sử dụng UTF-8 bằng cách gửi tham số bộ ký tự
- Chuỗi kết quả được mã hóa bằng một biến thể của Base64 (+/ và có phần đệm)
- Phương thức ủy quyền và một ký tự khoảng trắng (e. g. "Basic") sau đó được thêm vào chuỗi được mã hóa
Ví dụ: nếu trình duyệt sử dụng Aladdin làm tên người dùng và mở mè làm mật khẩu, thì giá trị của trường là mã hóa Base64 của Aladdin. mở vừng hoặc QWxhZGRpbjpvcGVuIHNlc2FtZQ==. Sau đó, trường tiêu đề Ủy quyền sẽ xuất hiện dưới dạng
Chào mừng bạn đến với hướng dẫn về cách thực hiện cuộc gọi PHP CURL với xác thực cơ bản HTTP. Cần bảo mật cuộc gọi từ máy chủ đến máy chủ mà không cần tất cả các công cụ đăng nhập, xác minh và mã hóa điên rồ?
Để thực hiện lệnh gọi PHP CURL với xác thực cơ bản HTTP, chúng tôi phải đặt người dùng và mật khẩu trong tùy chọn CURL
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, "//SITE.COM");
- ________số 8
- curl_setopt($ch, CURLOPT_USERPWD, "USER:PASSWORD");
- <?php // (A) THE SETTINGS $url = "//localhost/protected/secret.php"; $user = "USER"; $password = "PASS"; // (B) CURL INIT $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "$user:$password"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if (substr($url, 0, 5)=="https") { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); } // (C) CURL EXEC // NOTE: HTTP RESPONSE CODE 200 = OK $result = curl_exec($ch); if (curl_errno($ch)) { echo curl_error($ch); } else { $info = curl_getinfo($ch); if ($info["http_code"] != 200) { print_r($info); } else { echo $result; } } curl_close($ch);0
- <?php // (A) THE SETTINGS $url = "//localhost/protected/secret.php"; $user = "USER"; $password = "PASS"; // (B) CURL INIT $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "$user:$password"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if (substr($url, 0, 5)=="https") { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); } // (C) CURL EXEC // NOTE: HTTP RESPONSE CODE 200 = OK $result = curl_exec($ch); if (curl_errno($ch)) { echo curl_error($ch); } else { $info = curl_getinfo($ch); if ($info["http_code"] != 200) { print_r($info); } else { echo $result; } } curl_close($ch);1
- <?php // (A) THE SETTINGS $url = "//localhost/protected/secret.php"; $user = "USER"; $password = "PASS"; // (B) CURL INIT $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "$user:$password"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if (substr($url, 0, 5)=="https") { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); } // (C) CURL EXEC // NOTE: HTTP RESPONSE CODE 200 = OK $result = curl_exec($ch); if (curl_errno($ch)) { echo curl_error($ch); } else { $info = curl_getinfo($ch); if ($info["http_code"] != 200) { print_r($info); } else { echo $result; } } curl_close($ch);2
Điều đó sẽ bao gồm những điều cơ bản, nhưng hãy đọc để biết ví dụ thực tế
ⓘ Tôi đã bao gồm một tệp zip chứa tất cả mã nguồn khi bắt đầu hướng dẫn này, vì vậy bạn không cần phải sao chép-dán mọi thứ… Hoặc nếu bạn chỉ muốn đi sâu vào
TLDR – TRANG TRÌNH BÀY NHANH
Tải xuống & Ghi chú
TẢI XUỐNG & LƯU Ý
Đầu tiên, đây là liên kết tải xuống mã ví dụ như đã hứa
GHI CHÚ NHANH
- Ví dụ này dựa trên máy chủ XAMPP
- Chỉnh sửa <?php // (A) THE SETTINGS $url = "//localhost/protected/secret.php"; $user = "USER"; $password = "PASS"; // (B) CURL INIT $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "$user:$password"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if (substr($url, 0, 5)=="https") { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); } // (C) CURL EXEC // NOTE: HTTP RESPONSE CODE 200 = OK $result = curl_exec($ch); if (curl_errno($ch)) { echo curl_error($ch); } else { $info = curl_getinfo($ch); if ($info["http_code"] != 200) { print_r($info); } else { echo $result; } } curl_close($ch);3, thay đổi <?php // (A) THE SETTINGS $url = "//localhost/protected/secret.php"; $user = "USER"; $password = "PASS"; // (B) CURL INIT $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "$user:$password"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if (substr($url, 0, 5)=="https") { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); } // (C) CURL EXEC // NOTE: HTTP RESPONSE CODE 200 = OK $result = curl_exec($ch); if (curl_errno($ch)) { echo curl_error($ch); } else { $info = curl_getinfo($ch); if ($info["http_code"] != 200) { print_r($info); } else { echo $result; } } curl_close($ch);4 thành đường dẫn tệp của riêng bạn – Người dùng và mật khẩu mặc định trong $ch = curl_init();0 là $ch = curl_init();1 và $ch = curl_init();2
- Chỉnh sửa $ch = curl_init();3, thay đổi $ch = curl_init();4 thành của riêng bạn
MÃ VÍ DỤ TẢI XUỐNG
Nhấp vào đây để tải xuống tất cả mã nguồn ví dụ, tôi đã phát hành nó theo giấy phép MIT, vì vậy hãy thoải mái xây dựng trên mã nguồn đó hoặc sử dụng nó trong dự án của riêng bạn
PHP CURL VỚI HTTP AUTH
Được rồi, bây giờ chúng ta hãy đi vào ví dụ về CURL với xác thực cơ bản HTTP
MÁY CHỦ A) GỌI PHP CURL
xác thực CURL. php
<?php // (A) THE SETTINGS $url = "//localhost/protected/secret.php"; $user = "USER"; $password = "PASS"; // (B) CURL INIT $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "$user:$password"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if (substr($url, 0, 5)=="https") { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); } // (C) CURL EXEC // NOTE: HTTP RESPONSE CODE 200 = OK $result = curl_exec($ch); if (curl_errno($ch)) { echo curl_error($ch); } else { $info = curl_getinfo($ch); if ($info["http_code"] != 200) { print_r($info); } else { echo $result; } } curl_close($ch);Điều này sẽ khá tự giải thích
- Như trong phần giới thiệu, tất cả những gì chúng ta cần là thiết lập các tùy chọn CURL (_______65 và $ch = curl_init();6) tương ứng
- Nếu bạn gặp sự cố với SSL (_______67), hãy thử tắt xác minh ngang hàng – $ch = curl_init();8
- Lưu ý phần “tìm nạp kết quả”, chúng ta có thể sử dụng $ch = curl_init();9 để biết thêm thông tin về phản hồi của máy chủ. Điều quan trọng, hãy kiểm tra curl_setopt($ch, CURLOPT_URL, "//SITE.COM");0 – Xác thực không thành công thường sẽ trả về 401 (trái phép)
MÁY CHỦ B) THƯ MỤC ĐƯỢC BẢO VỆ
Đây là một bổ sung nhỏ cho các bạn đang chạy Apache và không biết cách bảo mật các thư mục bằng auth HTTP cơ bản
- Các máy chủ web Apache đi kèm với một công cụ có tên là curl_setopt($ch, CURLOPT_URL, "//SITE.COM");1 và chúng tôi có thể sử dụng công cụ này để tạo tệp người dùng/mật khẩu – curl_setopt($ch, CURLOPT_URL, "//SITE.COM");2
- Tiếp theo, tạo một tệp curl_setopt($ch, CURLOPT_URL, "//SITE.COM");3 trong thư mục mà bạn muốn bảo vệ
- curl_setopt($ch, CURLOPT_URL, "//SITE.COM");4
- curl_setopt($ch, CURLOPT_URL, "//SITE.COM");5
- curl_setopt($ch, CURLOPT_URL, "//SITE.COM");6
- curl_setopt($ch, CURLOPT_URL, "//SITE.COM");7
Đó là tất cả
BIT BỔ SUNG & LIÊN KẾT
Đó là tất cả cho hướng dẫn chính và đây là một phần nhỏ về một số tính năng bổ sung và liên kết có thể hữu ích cho bạn
LIÊN KẾT và THAM KHẢO
- Tùy chọn CURL – PHP
- Xác thực và ủy quyền cơ bản – Apache
- htpasswd – Quản lý tệp người dùng để xác thực cơ bản
- Xác thực cơ bản cho IIS – Microsoft
- Xác thực cơ bản cho NGINX
BẢNG CHEAT INFOGRAPHIC
Cảm ơn bạn đã đọc, và chúng tôi đã đi đến cuối. Tôi hy vọng rằng nó đã giúp bạn hiểu rõ hơn và nếu bạn muốn chia sẻ bất cứ điều gì với hướng dẫn này, vui lòng bình luận bên dưới. Chúc may mắn và mã hóa hạnh phúc