Trong cấu hình nhật ký Apache, có thể chỉ định rằng tên người dùng xác thực HTTP sẽ được ghi nhật ký. Hầu hết các tập lệnh PHP đều có xác thực dựa trên cookie của riêng chúng. Có thể trong PHP để cung cấp cho Apache một tên người dùng xác thực HTTP cho mục đích ghi nhật ký, ngay cả khi xác thực dựa trên cookie? Nếu có, mã sẽ trông như thế nào? Nếu không, lựa chọn thay thế là gì?Đặt tên người dùng trong apache access_log bằng PHP và không có HTTP auth
Trả lời
Apache chuyển dữ liệu giữa các mô-đun trong ghi chú. Nếu bạn chạy PHP làm mô-đun Apache, bạn có thể sử dụng apache_note()
để nhận và đặt ghi chú. Sau đó, bạn có thể bao gồm the %{note_name}n
log format string để ghi điều này vào nhật ký truy cập. Điều này sẽ không "rò rỉ" bất kỳ dữ liệu nào trở lại máy khách.
Trong PHP:
apache_note('username', $username);
Trong cấu hình máy chủ của bạn:
LogFormat "%h %l %{username}n %t \"%r\" %>s %b" common_with_php_username
CustomLog logs/access_log common_with_php_username
Một khả năng là lưu trữ tên người dùng & phiên làm việc trước đây ở một nơi khác và để nhật ký ghi giá trị cookie trong đó (thường là %{PHPSESSID}C
), sau đó bạn có thể theo dõi lại.
Một lựa chọn khác sẽ được gửi một tiêu đề với tên người dùng lại cho khách hàng, tốt nhất là ngay sau khi bạn session_start
:
PHP:
header('X-Php-Sess-User: '.$username);
CustomLog:
%{X-Php-Sess-User}o
ngắn của sử dụng trình xử lý Apache để chạm vào cấu trúc dữ liệu auth * nội bộ, đặt cược tốt nhất của bạn là sử dụng các biến môi trường. Bạn sẽ thiết lập một biến môi trường cấp cao nhất sử dụng apache_setenv trong mã PHP của bạn
apache_setenv('USERID','jrodriguez',true);
và sau đó ghi giá trị vào file log với một mục LogFormat trong cấu hình Apache của bạn sử dụng "% {USERID} e" thay vì " % u"
LogFormat "%v:%p %h %l %{USERID}e %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" envuid_combined
CustomLog /path/to/access.log envuid_combined
Tất nhiên, các chứng thực khi thực hiện thực tế auth HTTP sẽ bị mất mãi mãi, vì vậy cân nhắc việc tiết kiệm% u ở một nơi khác - hoặc trong một lĩnh vực mới hoặc trong một tập tin đăng nhập song song.
sẽ không phải là một biến môi trường toàn cầu và như vậy là không đáng tin cậy –
@Esben Không chắc chắn chính xác những gì bạn có ý nghĩa, nhưng nói chung, không - một biến môi trường không phải là toàn cầu. Các giải pháp trên hoạt động hoàn hảo cho tôi. – rjmunro
Kể từ Apache 2.4.7 Apache cho phép bạn sao chép một phản ứng-header để một ghi chú. Vì vậy, nếu bạn không chạy PHP như một mô-đun Apache (nhưng ví dụ sử dụng PHP-FPM), và bạn cũng không muốn giá trị log được gửi đến máy khách (thường sẽ xảy ra nếu bạn đặt nó trong một phản ứng-header), đây là một cách để làm điều đó:
php:
header('X-Username: '.$username);
httpd.conf:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{username}n\"" logfmtname
vhost.conf:
CustomLog logs/vhost-access_log logfmtname
# copy response-header value to note
Header note X-Username username
# unset response-header so client won't get it
Header unset X-Username
- 1. Nhận tên người dùng cơ bản-auth trong php
- 2. Ký tự UTF-8 bị xáo trộn trong tên người dùng Auth HTTP cơ bản
- 3. Node.js http basic auth
- 4. apache php> yêu cầu người dùng
- 5. Tôi làm cách nào để có được tên người dùng được xác thực trong Apache bằng cách sử dụng xác thực HTTP thuần túy và PHP?
- 6. Đăng nhập CakePHP bằng Tên người dùng hoặc Email bằng thành phần Auth
- 7. Nhận apache linux người dùng từ php
- 8. nhóm nginx http auth
- 9. Django auth: tăng chiều dài tên người dùng tối đa
- 10. Cách lấy tên người dùng và SID cho người dùng bằng tên miền trong ldap
- 11. Làm cách nào để đặt tên người dùng và tên nhóm trong IAM bằng CloudFormation?
- 12. Nhiều người dùng XDebug và PHP Debugging
- 13. Nhận tên người dùng Windows của người dùng hiện tại bằng cách sử dụng php?
- 14. Auth Cakephp với nhiều bảng "Người dùng"
- 15. Freeradius và PHP auth script
- 16. Cách tạo hồ sơ người dùng bằng PHP và MySQL
- 17. Cách đặt tên người dùng và mật khẩu smtp bằng cách sử dụng ini_set
- 18. CakePHP Tên người dùng URL bằng Regex?
- 19. PHP (Apache) âm thầm chuyển đổi HTTP 429 và những người khác thành 500
- 20. URL Tên người dùng thân thiện trong PHP?
- 21. preg_match() và tên người dùng
- 22. wget và htaccess: tên người dùng chỉ
- 23. Dữ liệu người dùng ASP.Net Store trong Auth Cookie
- 24. Loại trừ tên người dùng hoặc mật khẩu khỏi UserChangeForm trong Django Auth
- 25. Tác nhân người dùng Android HTTP
- 26. Xác thực Gitweb bằng Gitosis không có LDAP Auth?
- 27. Netbeans Basic Http Auth Jax-WS
- 28. Có độ dài tối đa cho tên người dùng xác thực HTTP BASIC không?
- 29. Cách đăng nhập bằng Tên người dùng hoặc id email
- 30. Mã xác thực ion auth cố gắng để có được tên người dùng của một người dùng đăng nhập vào một chuỗi
tôi đừng nghĩ đó là ý hay. Tại sao không sử dụng một logfile riêng biệt? –
Bởi vì tôi muốn thực hiện các thống kê đơn giản với một công cụ như AWStats. – chiborg