0

我正在使用 PHP 在 Apache HTTP 服务器(2.2 版)上实现 HTTP 基本身份验证。我想用密码保护的唯一目录是我网站的主要公共 Web 根目录的子目录(例如,我们称受保护目录为“/private”,其领域为“Private”)。

如果可能的话,我希望已经在“私人”领域中通过身份验证的用户(并且仅限于这些用户)在网站的主页(以及任何其他网页,就此而言)查看自定义内容。

我想知道的是,是否可以在不强制在我的域顶级的顶级登录提示的情况下执行此操作(例如www.jdclark.org,或者,就此而言,如果“私人”领域之外的任何其他 URI)?

编辑:

我考虑过的一种实现上述目的的技术如下:当用户通过“/private”目录中的访问控制被认证到“Private”领域时,可以在 PHP 中设置会话 cookie。然后我可以检查这个 cookie 的存在(它可能包含会话 ID 或某种唯一的随机字符串),但是虽然我不宣称自己是 IT 安全专家,但这种方法感觉有点“骇人听闻” ,” 并且有些东西告诉我这是不安全的(例如,恶意用户使用 HTTP 标头来欺骗该 cookie 会很简单吗?)。任何建议将不胜感激。

4

1 回答 1

1

检查是否存在 HTTP 身份验证标头并使用它来确定要显示的内容。

if (isset($_SERVER['PHP_AUTH_USER'])) {
    $username = $_SERVER['PHP_AUTH_USER'];
    $password = $_SERVER['PHP_AUTH_PW'];
    // validate login credentials
    $private = true; // or false if validation fails
}

if ($private) {
    // load special view
}
else {
   // load normal view
}

如果用户尚未在其他地方登录,这不会提示用户登录。

如果您要在多个地方执行此操作,那么有一个可重用的类或文件提供一个函数来检查标头并验证凭据(true成功时返回,false失败时返回)而不是复制代码是有意义的.

于 2013-02-04T11:30:35.160 回答