Máy chủ $_ [ Php_auth_user ] là gì?

Trong một số cấu hình máy chủ nhất định, $_SERVER['PHP_AUTH_PW'] và $_SERVER['PHP_AUTH_USER'] sẽ không bao giờ được đặt
Yêu cầu chúng ở $_SERVER['HTTP_AUTHORIZATION'] hoặc $_SERVER['REDIRECT_HTTP_AUTHORIZATION']

Điều này xảy ra rất thường xuyên và điều này phá vỡ hoàn toàn chức năng của mô-đun

Bao gồm bản vá để xử lý tất cả các tình huống (xem nhận xét trong mã)

Xác thực HTTP theo truyền thống có dạng. htaccess nằm rải rác trong các thư mục khác nhau mà quản trị viên web muốn giữ riêng tư. Khác biệt. htaccess, kết hợp với một. htpasswd, chứa thông tin về người dùng được phép truy cập vào một thư mục và mật khẩu của họ

Mặc dù Apache cho phép bạn tùy chỉnh các quyền này, nhưng hệ thống không linh hoạt - việc chỉnh sửa các tệp bằng tay mỗi khi bạn thêm người dùng hoặc phải nhóm những người dùng được ủy quyền lại với nhau bằng mật khẩu hơi lạc hậu.

Xác thực HTTP chủ yếu chỉ là vấn đề gửi các tiêu đề HTTP đặc biệt tới ứng dụng khách của bạn yêu cầu họ cung cấp mã truy cập và việc triển khai trong PHP rất đơn giản miễn là bạn đã định cấu hình PHP để chạy dưới dạng mô-đun Apache (xem vấn đề trước về cài đặt của chúng tôi . Hãy xem xác thực cơ bản bằng cách tạo tệp auth. php, nó sẽ trông như thế này


Dấu ngoặc nhọn được sử dụng bên trong câu lệnh in cuối cùng của chúng ta vì chúng ta đang in ra một giá trị từ bên trong một mảng và dấu ngoặc nhọn yêu cầu PHP coi $_SERVER['PHP_AUTH_USER'] là một biến mảng cần thay thế bằng giá trị của nó

Để bắt đầu quá trình xác thực, chúng tôi gửi hai tiêu đề HTTP bằng hàm header() của PHP. Với header(), bạn có thể gửi bất kỳ tiêu đề HTTP nào bạn muốn, miễn là bạn gửi tất cả chúng trước khi gửi bất kỳ HTML nào. Tôi sẽ đề cập đến header() trong một số bài viết tiếp theo, nhưng hiện tại chúng ta chỉ quan tâm đến tiêu đề WWW-Authenticate và mã trạng thái HTTP

WWW-Authenticate cho phép chúng tôi xác định khu vực hoặc _realm_ mà chúng tôi đang giới hạn quyền truy cập. Nó có thể là "Cổng thư Internet", "Khu vực thành viên" hoặc, trong ví dụ của chúng tôi, "Khu vực riêng tư". Tên vùng này thường được hiển thị cho người dùng khi họ được nhắc nhập tên người dùng và mật khẩu của mình

Hàm header() thứ hai gửi trạng thái HTTP "401", có nghĩa là "không có quyền truy cập". Điều này thường có nghĩa là không có tên người dùng và mật khẩu nào được nhập, nhưng nó cũng có thể có nghĩa là các chi tiết đã nhập không chính xác. Do đó, trong khi WWW-Authenticate cho trình duyệt biết phản hồi nào được yêu cầu để xác thực, thì tiêu đề 401 cho biết "không có mục nhập" - bạn cần cả hai để thực hiện xác thực

Nếu người dùng của bạn nhấp vào "Hủy", họ sẽ được hiển thị một thứ khác ngoài trang trống. Trong ví dụ của chúng tôi ở trên, chúng tôi có dòng in bắt đầu "Xin lỗi - bạn cần hợp lệ" sẵn sàng cho tình huống này

Câu lệnh in cuối cùng, "Chào mừng đến với khu vực riêng tư" dành cho những người đã xác thực thành công. Tất cả những gì cần thiết để xác thực hiện tại là tên người dùng và mật khẩu - chúng tôi không kiểm tra các giá trị của dữ liệu, chúng tôi chỉ chấp nhận bất cứ điều gì họ cung cấp cho chúng tôi

if (!isset($_SERVER['PHP_AUTH_USER'])) {

Dòng đó tạo thành mấu chốt của xác thực với PHP. Khi người dùng gửi xác thực, PHP sẽ nhận được tên người dùng và mật khẩu lần lượt là $_SERVER['PHP_AUTH_USER'] và $_SERVER['PHP_AUTH_PW']. Bằng cách kiểm tra xem $_SERVER['PHP_AUTH_USER'] đã được đặt hay chưa, chúng tôi đang nói rằng "Chúng tôi đã nhận được tên người dùng xác thực từ máy khách chưa?"

Khi khách truy cập của chúng tôi cung cấp tên người dùng và mật khẩu, tập lệnh sẽ được gọi lại. Lần này, câu lệnh 'nếu' được đánh giá là đúng và chúng tôi in ra thông báo chào mừng của mình. Hầu hết các trang web đều muốn thực hiện một số loại kiểm tra tên người dùng và mật khẩu để xác thực có giá trị, vì vậy hãy để chúng tôi thay đổi tập lệnh để bao gồm kiểm tra thông tin xác thực đơn giản


Tập lệnh đã sửa đổi ở trên hiện chỉ cho phép người dùng cung cấp tên người dùng 'paul' và mật khẩu 'hudson'. Chúng ta có hai điều kiện được kết hợp bằng cách sử dụng AND (&&), có nghĩa là câu lệnh 'if' chỉ có giá trị đúng nếu tên người dùng là 'paul' và mật khẩu là 'hudson'

Hệ thống của chúng tôi hiện đã mạnh hơn, nhưng chúng tôi vẫn cần mã hóa cứng tên người dùng và mật khẩu cho những người mà chúng tôi muốn có quyền truy cập vào lĩnh vực của mình

Bạn muốn học PHP 7?

Hacking with PHP đã được cập nhật đầy đủ cho PHP 7 và hiện có sẵn dưới dạng PDF có thể tải xuống. Nhận hơn 1200 trang học PHP thực hành ngay hôm nay

Nếu điều này hữu ích, vui lòng dành chút thời gian để nói với những người khác về Hacking với PHP bằng cách tweet về nó

Chủ đề này dành cho người dùng nâng cao đã quen thuộc với các chức năng xác thực HTTP của PHP và muốn đặt mật khẩu bảo vệ tệp PHP, sau đó tìm tên người dùng và mật khẩu mà khách truy cập đã cung cấp để chúng có thể được sử dụng trong tập lệnh PHP

Xác thực HTTP của PHP với trang PHP giải thích khái niệm này, nhưng không đề cập đến một vấn đề quan trọng. Các biến mật khẩu văn bản gốc thường không được cung cấp cho các tập lệnh PHP vì lý do bảo mật

Bạn có thể dễ dàng thay đổi điều này. Tạo một. htaccess trong cùng thư mục với tập lệnh PHP của bạn và thêm dòng này

CGIPassAuth On

Điều này yêu cầu máy chủ Web Apache chuyển tên người dùng và mật khẩu được mã hóa cho PHP (hoặc bất kỳ tập lệnh nào khác) trong một biến có tên HTTP_AUTHORIZATION (giải thích thêm về cách thức hoạt động của nó)

Sau đó, PHP sẽ trích xuất một phiên bản văn bản gốc của HTTP_AUTHORIZATION cho các biến PHP_AUTH_USER và PHP_AUTH_PW. Ví dụ: nếu bạn sử dụng CGIPassAuth On và xem một thư mục được bảo vệ bằng mật khẩu với tên người dùng là “người dùng” và mật khẩu là “mật khẩu”, phpinfo() sẽ bao gồm điều này trong phần biến

$_SERVER['HTTP_AUTHORIZATION']: Basic dXNlcjpwYXNzd29yZA== 
$_SERVER['PHP_AUTH_USER']: user
$_SERVER['PHP_AUTH_PW']: password

Tập lệnh có thể kiểm tra các biến này để tìm tên người dùng và mật khẩu

Tôi có nên sử dụng dòng RewriteRule thay vì CGIPassAuth không?

Đây chỉ đơn thuần là một phiên bản hiện đại hơn của những. htaccess mà bạn có thể thấy được đề xuất ở nơi khác

Xác thực trong PHP là gì?

Xác thực là quá trình xác thực thông tin đăng nhập của người dùng . Người dùng có ở trong hệ thống và tên người dùng của họ có khớp với mật khẩu của họ không? .

Làm cách nào để kiểm tra xem người dùng đã đăng nhập vào PHP chưa?

session_start(); Kiểm tra xem $_SESSION["loggedIn" ] (is not) true hay không - Nếu không, hãy chuyển hướng họ đến trang đăng nhập .

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

Cách xây dựng xác thực an toàn bằng PHP .
các giao diện
Giao diện người dùng
UserTokenGiao Diện
Giao diện quản lý người dùng
Bây giờ hãy tạo các lớp sẽ thực hiện các giao diện trên
PasswordTrait để quản lý mật khẩu
UserManager để quản lý người dùng
UserToken để nhận Người dùng hiện tại

Làm cách nào để chuyển tên người dùng và mật khẩu trong url https?

Tên người dùng và mật khẩu phải được thêm ở định dạng − https. //tên tài khoản. mật khẩu@URL .