我并不是一个经验丰富的 Apache 系统管理员(因为我是唯一一个对此有所了解的人,所以我就担任了这个角色!),而且我真的被这个问题困扰了。多亏了一位过于热心的销售员,我不得不快速想出一个解决方案……
基本上,我们有一个 Apache 服务器,除其他功能外,它还用于代理虚拟机上某些专有软件的传入连接。每个客户都有自己的 VM 和不同的 URL。这些 URL 经过混淆,并使用 RewriteMap 脚本根据 LDAP 目录中的信息(以及一些其他因素)确定代理到的位置:
RewriteMap routing_map prg:/scripts/routing_map.pl
RewriteRule ^/app/([^/]+)(.*)$ ${routing_map:$1:$2} [P,QSA,L]
一切都运行良好。
现在的问题是:
我们必须以类似的方式将另一个路径和代理映射到虚拟机,但这次需要密码保护。所有用户都位于每个客户单独的组织单位下的 LDAP 目录中。只有来自顾客A应该能够访问顾客A的虚拟机。
有没有办法做类似 RewriteMap 的事情,但又不失安全性?即根据 URL 中唯一的客户部分,告诉 Apache 在搜索 LDAP 以验证用户身份时使用不同的过滤器?在下面的 Apache 配置示例中,我需要XXX用所访问 URL 的唯一客户部分进行替换。
AuthType Basic
AuthBasicProvider ldap
AuthName "Restricted Access"
AuthzLDAPAuthoritative on
AuthLDAPURL ldap://ldap.local/dc=batch?sub
Require ldap-group cn=customers,ou=group,dc=batch
Require ldap-attribute x-od-customer=XXXX
Satisfy All
经过大量的谷歌搜索和实验后,我完全陷入困境,需要一些建议
干杯!
答案1
出于安全考虑,您不会想这样做,因为 URL 中用户可以访问的任何内容,攻击者也可以访问该 URL 中的内容。这就是您尚未找到有关如何执行此操作的有用信息的原因。
你想要的是保持全部服务器端会话管理。一旦您验证了用户的身份,您就会使用安全的会话令牌来跟踪他们,然后如果他们想去某个特定区域,您会评估他们是否可以通过他们在服务器端持有的个人资料。
如需一些有用的指导,请查看Security Stack Exchange 上的这个问题或查看会议标签。