微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

把用户名在Apache的access_log与PHP和没有HTTPauthentication

在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] 举报,一经查实,本站将立刻删除。

相关推荐