针对经过身份验证的用户的 Apache 指令?

针对经过身份验证的用户的 Apache 指令?

使用 Apache 2.2,如果未经身份验证的用户使用 http,我想使用 mod_rewrite 将他们重定向到 https。是否有指令或条件可以测试用户是否经过身份验证?

/foo例如,我可以在我的服务器上设置受限位置:-

<Location "/foo/">
    Order deny,allow
    # Deny everyone, until authenticated...
    Deny from all

    # Authentication mechanism
    AuthType Basic
    AuthName "Members only"
    # AuthBasicProvider ...
    # ... Other authentication stuff here.

    # Users must be valid.
    Require valid-user
    # Logged-in users authorised to view child URLs:
    Satisfy any

    # If not SSL, respond with HTTP-redirect
    RewriteCond ${HTTPS} off
    RewriteRule /foo/?(.*)$ https://${SERVER_NAME}/foo/$2 [R=301,L]

    # SSL enforcement.
    SSLOptions FakeBasicAuth StrictRequire
    SSLRequireSSL
    SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
</Location>

这里的问题是每个子文件夹中的每个文件都将被加密。这完全没有必要,但我认为没有理由禁止它。我希望RewriteRule只在身份验证期间触发。如果用户已经获得查看文件夹的授权,那么我不希望RewriteRule触发。这可能吗?

编辑:

我这里没有使用任何前端 HTML。这仅使用 Apache 的内置目录浏览界面及其内置身份验证机制。我的<Directory>配置是:

<Directory ~ "/foo/">
     Order allow,deny
     Allow from all
     AllowOverride None
     Options +Indexes +FollowSymLinks +Includes +MultiViews
     IndexOptions +FancyIndexing
     IndexOptions +XHTML
     IndexOptions NameWidth=*
     IndexOptions +TrackModified
     IndexOptions +SuppressHTMLPreamble
     IndexOptions +FoldersFirst
     IndexOptions +IgnoreCase
     IndexOptions Type=text/html
</Directory>

答案1

您似乎对基本身份验证的工作原理感到困惑。基本身份验证要求对每个请求进行密码查找,例如,加载包含 100 张图片的 html 页面需要处理至少 100 个身份验证请求。具体来说,如果不使用 SSL/TLS,则凭据将以纯文本形式传递,可能会被拦截。当您使用基于 cookie 的身份验证时,仅为登录页面启用 https 是有意义的(例如http://finesec.com/sitedefensor.html

相关内容