Làm cách nào để tạo auth cơ bản trong PHP?

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

  1. 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
  2. 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ự
  3. Chuỗi kết quả được mã hóa bằng một biến thể của Base64 (+/ và có phần đệm)
  4. 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, "HTTP://SITE.COM");
  • ________số 8
  • curl_setopt($ch, CURLOPT_USERPWD, "USER:PASSWORD");
  • <?php
    // (A) THE SETTINGS
    $url = "http://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 = "http://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 = "http://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

  1. Ví dụ này dựa trên máy chủ XAMPP
  2. Chỉnh sửa
    <?php
    // (A) THE SETTINGS
    $url = "http://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 = "http://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
  3. Chỉnh sửa $ch = curl_init();3, thay đổi $ch = curl_init();4 thành của riêng bạn
Nếu bạn phát hiện ra một lỗi, hãy bình luận bên dưới. Tôi cũng cố gắng trả lời các câu hỏi ngắn, nhưng đó là một người so với cả thế giới… Nếu bạn cần câu trả lời gấp, vui lòng xem danh sách các trang web của tôi để được trợ giúp về lập trình

 

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 = "http://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, "HTTP://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

  1. 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, "HTTP://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, "HTTP://SITE.COM");2
  2. Tiếp theo, tạo một tệp curl_setopt($ch, CURLOPT_URL, "HTTP://SITE.COM");3 trong thư mục mà bạn muốn bảo vệ
    • curl_setopt($ch, CURLOPT_URL, "HTTP://SITE.COM");4
    • curl_setopt($ch, CURLOPT_URL, "HTTP://SITE.COM");5
    • curl_setopt($ch, CURLOPT_URL, "HTTP://SITE.COM");6
    • curl_setopt($ch, CURLOPT_URL, "HTTP://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

Làm cách nào tôi có thể nhận được xác thực cơ bản trong PHP?

$_SERVER["REMOTE_USER"] - CGI tiêu chuẩn . $_SERVER["PHP_AUTH_USER"] - APACHE . $_SERVER["AUTH_USER"] - IIS .

Làm cách nào để tạo Ủy quyền trong PHP?

Việc xác thực và ủy quyền trong hướng dẫn này sẽ diễn ra như sau. Gửi thông tin đăng nhập và mật khẩu đến dịch vụ xác thực. Nhận lại mã thông báo. .
Bước 1. Đăng nhập/Mật khẩu để xác thực. .
Bước 2. Truy xuất mã thông báo. .
Bước 3. Gửi mã thông báo của chúng tôi đến Dịch vụ thanh toán

Làm cách nào để thêm xác thực cơ bản trong PHP Curl?

Để gửi thông tin đăng nhập xác thực cơ bản bằng Curl, hãy sử dụng thông tin đăng nhập "-u. mật khẩu" tùy chọn dòng lệnh . Curl tự động chuyển đổi thông tin đăng nhập. ghép mật khẩu thành một chuỗi được mã hóa Base64 và thêm phần "Ủy quyền. Tiêu đề [mã thông báo] cơ bản cho yêu cầu.

Làm cách nào để sử dụng xác thực cơ bản trong REST API PHP?

Người dùng API REST có thể xác thực bằng cách cung cấp ID người dùng và mật khẩu của họ trong tiêu đề HTTP . Để sử dụng phương thức xác thực này với các phương thức HTTP, chẳng hạn như POST, PATCH và DELETE, tiêu đề HTTP ibm-mq-rest-csrf-token cũng phải được cung cấp, cũng như ID người dùng và mật khẩu.