基于Perl CGI::Session的Apache目录指令认证

基于Perl CGI::Session的Apache目录指令认证,perl,apache,Perl,Apache,我已经使用CGI:Session“保护”了我的站点,但是我的web服务器有一个别名目录,它指向文档根目录之外并包含文件 Alias /files /myData/all <Directory /myData/all > Options Indexes MultiViews AllowOverride None Order deny,allow Allow from all </Directory> Alias/files/m

我已经使用CGI:Session“保护”了我的站点,但是我的web服务器有一个别名目录,它指向文档根目录之外并包含文件

    Alias /files /myData/all
<Directory /myData/all >
    Options Indexes MultiViews
     AllowOverride None
     Order deny,allow
     Allow from all
</Directory>
Alias/files/myData/all
选项索引多视图
不允许超限
命令拒绝,允许
通融
如何将目录链接到我的cgi:session以确保其安全?Apache如何知道用户是否拥有有效的cookie并允许他们访问
/文件


类似的问题:

您没有保护您的“站点”

当访问者加载您的perl脚本时(无论您在Apache中如何安排),您的脚本将读取他们发送的cookie,找到它感兴趣的cookie,在其会话存储中查找它(可能是磁盘上的DB_文件存档),并尝试从存储中加载“会话”

这是你决定从那里做什么;如果没有会话,您可能会告诉访问者登录,否则会显示(登录用户)您“站点”的特权部分(可能包括“注销”选项,该选项会破坏登录用户的会话存储)

对于要“保护”的另一个文件夹,您需要使用另一个perl脚本为其提供服务。通过以下方式之一:

  • a) 重写请求,或
  • b) 编写识别会话存储的mod_perl身份验证处理程序
  • c) 将会话模块更改为与Apache更好集成的模块

不确定它的最新程度,但似乎提供了一个会话API,可以从您的perl代码和Apache身份验证处理程序中访问——这正是您所要求的,IMHO,除了不是CGI::session执行上述实现之外——即:选项c)。

在这种情况下重写如何工作?我愿意更改上述a)中的实现,我的意思是使用
mod_rewrite
/某些路径/文件名
的请求更改为
/其他路径/您的脚本.cgi?file=filename
。然后,您只需在script.cgi中执行与站点其余部分相同的身份验证。如果成功,请在打印文件内容之前设置相应的
内容类型:
内容处置:
标题。失败时,302重定向到您的登录页面。您可能应该通过Apache指令使包含文件的文件夹不可访问。此外,您可能希望通过对初始请求使用
mod_proxy
而不是
mod_rewrite
来隐藏正在发生的事情。这确实有效,但是否有任何方法可以访问整个文件夹。如果您的-script.cgi正确验证,它可能会将您重定向到/some path/。请阅读Apache::SessionManager的文档,它是一个Apache身份验证处理程序。您可以将其与
组合使用。