我正在嘗試調試apache升級後發生的問題。我想將redmine集成到我的apache驗證/訪問控制中。調試Apache 2.4 PerlAuthenHandler
這裏是我的Apache配置:
<Location "/git/">
AuthType Basic
AuthName "Git Access"
Require valid-user
Order deny,allow
Allow from all
PerlAccessHandler Apache::Authn::Redmine::access_handler
PerlAuthenHandler Apache::Authn::Redmine::authen_handler
...
這是接入/認證介紹處理器:
sub access_handler {
my $r = shift;
unless ($r->some_auth_required) {
$r->log_reason("No authentication has been configured");
return FORBIDDEN;
}
return OK unless request_is_read_only($r);
my $project_id = get_project_identifier($r);
$r->log_error("Setting Auth to OK") if is_public_project($project_id, $r) && anonymous_role_allows_browse_repository($r);
$r->log_error("Content: " . $r->get_handlers("PerlAuthenHandler"));
$r->set_handlers(PerlAuthenHandler => [\&ok_authen_handler])
if is_public_project($project_id, $r) && anonymous_role_allows_browse_repository($r);
return OK
}
sub ok_authen_handler {
my $r = shift;
$r->log_error("ok_authen_handler()...");
my ($res, $redmine_pass) = $r->get_basic_auth_pw();
return OK;
}
sub authen_handler {
my $r = shift;
$r->log_error("authen_handler() ...");
my ($res, $redmine_pass) = $r->get_basic_auth_pw();
return $res unless $res == OK;
if (is_member($r->user, $redmine_pass, $r)) {
$r->log_error("Auth succeeded");
return OK;
} else {
$r->log_error("Auth failed...");
$r->note_auth_failure();
return DECLINED;
}
}
正如你所看到的,進入處理程序的權威性處理程序重置爲在一些虛擬方法如果不需要認證。理論上,這允許選擇性的匿名訪問。
但在實踐中的Apache 2.4產生錯誤:
AH00027: No authentication done but request not allowed without authentication for $PATH. Authentication not configured?
我已經釘在問題的處理程序訪問黑客,如果我取消了set_handlers聲明,我可以對管理平臺進行身份驗證。所以我猜這個「黑客」有什麼問題。不幸的是,我不是一個真正的perl傢伙,所以我不知道如何進一步調查這個問題。
有什麼辦法搞清楚的是什麼「黑客」控制流之間和正常的一個重要差異(即設置身份驗證處理程序)?
這也解決了我的問題:)但擔心如果這造成任何安全漏洞,你有沒有注意到這個修復後的任何安全漏洞? – Ganesh