基本身份验证只需扩展即可

时间:2014-05-29 21:33:09

标签: apache .htaccess authentication

我们在云上有一些公开内容,我正在尝试使用Basic Auth阻止人们访问我们的非生产网站,除非他们在我们的公司网络上。

一切正常,直到我提交的请求只是一个扩展名,例如'/.js'。

$ wget https://test.domain.com/.js
HTTP request sent, awaiting response... 401 Authorization Required
Authorization failed.

如果我添加文件名,则不会要求我进行身份验证。如果文件确实存在,我会得到200.

$ wget https://test.domain.com/x.js
HTTP request sent, awaiting response... 404 Not Found
2014-05-29 16:59:35 ERROR 404: Not Found.

这是Basic Auth配置。它是文档根目录中的.htaccess目录。

SetEnvIf     HOST             "^www.domain.com$"    allowProduction
SetEnvIF     X-Forwarded-For  "123\.123\.123\.123"  allowEmployee

AuthType     Basic
AuthName     "Authentication Required"
AuthUserFile /location/of/passwords/.htpasswd

Order        Deny,Allow
Deny         from all
Satisfy      any
Require      valid-user
Allow        from env=allowProduction
Allow        from env=allowEmployee

我修改了日志格式以显示X-Forwarded-For,因为Apache位于负载均衡器后面。

123.123.123.123 test.domain.com - - [29/May/2014:16:54:48 -0400] "GET /.js HTTP/1.0" 401 497 "-" "Wget/1.12 (linux-gnu)"
123.123.123.123 test.domain.com - - [29/May/2014:16:59:35 -0400] "GET /x.js HTTP/1.0" 404 287 "-" "Wget/1.12 (linux-gnu)"

我甚至尝试根据请求URI添加一些规则。我尝试了一些带有和不带前导'/'的变体。他们都没有工作。

SetEnvIf     Request_URI      "^/\..*$"             allowJunk

然后添加以下内容。

Allow        from env=allowJunk

我们确实有一个重写规则来禁止具有前导'。'的请求。但这是一个403而不是401.一个403是可以接受的,因为浏览器可以忽略它。 401要求用户输入用户名和密码。

RewriteRule "(^|/)\." - [F]

禁止请求的示例。

$ wget https://test.domain.com/x/.js
HTTP request sent, awaiting response... 403 Forbidden
2014-05-29 17:04:18 ERROR 403: Forbidden.

简单的解决方案是不要求任何前导'。' URL,但我们正在使用其他人的框架,我们在某些浏览器上收到这些请求。为一小部分客户重写框架是不可取的。提示他们输入密码是不太可取的。

有什么建议吗?

谢谢, 韦斯。

0 个答案:

没有答案