可以将 Apache 配置为需要基于查询字符串的身份验证吗?

可以将 Apache 配置为需要基于查询字符串的身份验证吗?

我已为网站中只有管理员才有权访问的某些区域配置了基本 Apache 身份验证。大多数 Web 应用程序通过将管理页面放在子目录中来方便使用,因此我为该目录配置了身份验证,例如“/goodapp/admin”。问题是有些应用程序反而依赖于查询字符串,例如。

/badapp/index.php?page=admin

有什么方法可以配置 Apache,使其根据查询字符串要求对这样的 URL 进行身份验证?

答案1

我对此进行了一些研究,但我认为 Apache 不会让您以允许您有条件地要求身份验证的方式匹配查询字符串。您可以匹配目录或文件,但不能匹配查询字符串中的项目(除非您正在进行 URL 重写)。这是有道理的,因为您可能不希望应用程序逻辑位于 Web 服务器配置中。

您可以做的是在任何具有管理员功能的脚本前面添加如下检查:

$isLoggedIn = array_key_exists('PHP_AUTH_USER', $_SERVER);
if (!$isLoggedIn && $isTryingToUseAdminFeature) {
  // redirect to login.php; this file has two properties:
  // 1) the apache conf requires authentication to access it
  // 2) it redirects the user back from whence they came
}

第二次,PHP_AUTH_USER应该设置,因此$isLoggedIn将为真。然后在您的代码中,您可以有条件地显示/允许管理功能。

相关内容