在Apache日志configuration中,可以指定应该loggingHTTP auth用户名。 大多数PHP脚本都有自己的基于cookie的authentication。 即使身份validation是基于cookie的,是否可以在PHP中为Apache提供用于login的HTTP身份validation用户名? 如果是,代码将如何? 如果没有,有什么替代品?
logging到非阻塞的命名pipe道?
如何编写写入/ var / log / myapp目录的C / C ++应用程序?
logging来自SIGTERM的消息
为AWS服务器(非EC2实例)configurationWindows服务器的CloudWatch日志监视
debugginginstall4j在Linux上工作,但不是在Windows上?
Apache在笔记中的模块之间传递数据。 如果将PHP作为Apache模块运行,则可以使用apache_note()来获取和设置注释。 然后可以包含%{note_name}n日志格式字符串以将其写入访问日志。 这不会“泄漏”任何数据回到客户端。
在PHP中:
apache_note( 'username',$username );
在你的服务器配置中:
LogFormat "%h %l %{username}n %t "%r" %>s %b" common_with_PHP_username CustomLog logs/access_log common_with_PHP_username
由于Apache 2.4.7 Apache允许您将响应头复制到笔记。 所以,如果你不把PHP作为一个Apache模块来运行(但是例如使用PHP-FPM),你也不希望把这个日志值发送给客户端(如果你把它设置为响应头),这是一个方法来做到这一点:
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
一种可能性是将用户名和以前的session_id存储在其他地方,并让日志写入cookie值(通常为%{PHPSESSID}C ),然后可以追溯到该日志。
另一个选择是将用户名头返回给客户端,最好是在session_start :
PHP:
header('X-PHP-Sess-User: '.$username);
的CustomLog:
%{X-PHP-Sess-User}o
在使用Apache处理程序触摸内部认证*数据结构之前,最好的办法是使用环境变量。 您可以在PHP代码中使用apache_setenv设置顶级环境变量
apache_setenv('USERID','jrodriguez',true);
然后使用“%{USERID} e”而不是“%u”在Apache配置中使用LogFormat条目将值写入日志文件。
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
当然,执行真正的 HTTP认证时真正的凭证将永远丢失,所以考虑将%u保存在其他地方 – 无论是在新的字段还是并行的日志文件中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。