我有一个受基本身份验证保护的 Apache 站点HTTP
。身份验证工作正常。现在我想通过依赖标头来绕过来自特定网站的用户的身份验证HTTP Referer
。
配置如下:
SetEnvIf Referer "^http://.*.example\.org" coming_from_example_org
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Deny from all
Allow from env=coming_from_example_org
AuthName "login required"
AuthUserFile /opt/http_basic_usernames_and_passwords
AuthType Basic
Require valid-user
Satisfy Any
</Directory>
对于 来说,这工作正常HTTP
,但对于 来说却失败了HTTPS
。我的理解是,为了检查HTTP
标题,SSL
必须完成握手,但apache
希望<Directory>
在进行握手之前检查指令SSL
,即使我将它们放在配置文件的底部。
问:我该如何解决这个问题?
附言:我并不痴迷于标题HTTP referer
,我可以使用其他选项,允许已知网站的用户绕过身份验证。
答案1
您可能需要大大改进您的身份验证机制;鉴于 referer 标头由客户端控制,我预计大约需要 18 秒才能弄清楚您正在做什么并绕过它。
我使用的机制可能涉及为您的网站设置一个 cookie,以表明用户已“预先认证”。然后,您可以在 apache 配置中测试该 cookie 内容是否存在(以及加密是否有效),并允许通过这种方式进行访问。
答案2
我建议你使用授权脚本
IE。mod_python http://modpython.org/live/current/doc-html/dir-handlers-auh.html
你也许可以使用这样的东西:
def authenhandler(req):
if req.headers_in.get("referer") == 'yourhostname':
return apache.OK
pw = req.get_basic_auth_pw()
user = req.user
if user == "spam" and pw == "eggs":
return apache.OK
else:
return apache.HTTP_UNAUTHORIZED
这mod_perl可以处理可编写脚本的身份验证,也可能处理其他语言