首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调试Apache2.4 PerlAuthenHandler

调试Apache2.4 PerlAuthenHandler
EN

Stack Overflow用户
提问于 2014-03-25 23:22:09
回答 2查看 3.3K关注 0票数 3

我正在尝试调试apache升级后出现的问题。我想将redmine集成到我的apache身份验证/访问控制中。

以下是我的apache配置:

代码语言:javascript
运行
复制
<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 
  ...

这是访问/身份验证处理程序:

代码语言:javascript
运行
复制
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;                                                                                                     
  }                                                                                                                        
}  

如您所见,访问处理程序将auth处理程序重置为某个伪方法,以防不需要身份验证。从理论上讲,这允许选择性匿名访问。

在实践中,虽然Apache2.4会产生一个错误:

代码语言:javascript
运行
复制
AH00027: No authentication done but request not allowed without authentication for $PATH. Authentication not configured?

我已经解决了访问处理程序中的黑客问题,如果我取消对set_handlers语句的注释,我就可以针对redmine进行身份验证。所以我猜这个"hack“有问题。不幸的是,我不是一个真正的perl爱好者,所以我不知道如何进一步研究这个问题。

有没有办法弄清楚“被黑客攻击”的控制流(即以编程方式设置身份验证处理程序)和正常的控制流之间的重要区别?

EN

回答 2

Stack Overflow用户

发布于 2015-03-27 23:19:45

一个有点肮脏的变通方法是即使在匿名模式下也总是设置"user“(REMOTE_USER)变量,因此"Require -user”看起来很好用,

代码语言:javascript
运行
复制
  $r->user("");
  return Apache2::Const::OK;

我们在实现惰性身份验证(Shibboleth风格)时遇到了这个问题。

票数 5
EN

Stack Overflow用户

发布于 2014-05-22 18:42:23

我最近从2.3升级到了2.5.1。现在,只要项目是公开的,我就会得到同样奇怪的行为。我有一些项目,其他人需要在没有注册的redmine网站上访问。所以我需要一个快速的解决方案。但我也不知道如何解决它。因此,我在redmine项目端创建了一个bug报告:

http://www.redmine.org/issues/16948

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22638972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档