gpt4 book ai didi

PHP 和 .htaccess 身份验证解决方案

转载 作者:可可西里 更新时间:2023-11-01 13:50:41 25 4
gpt4 key购买 nike

布局如下:

web root
- admin (dir)
- index.php
- js
- img
- other files / dirs
- dir
- files

到目前为止,我使用 .htaccess passwd 保护管理目录,因为我想对该目录中的所有文件(包括 js 脚本、jpg、pdf 等)进行完全访问控制。另一方面,我的自定义 CMS 使用 PHP session /cookie 为其他 URL 提供身份验证。我想要完成的是对 .htaccess 保护目录使用相同的 PHP 身份验证,避免为已经通过 PHP 身份验证的用户弹出用户/密码提示。总结:

  • 我希望管理目录使用 .htaccess 规则进行身份验证
  • 如果用户已经使用 PHP 进行身份验证(以 HTML 形式登录,在不 protected 文件上),则在访问管理目录内容时绕过第二个 .htaccess 身份验证过程
  • 如果未通过 PHP 身份验证的用户尝试访问管理目录中的内容,则应触发 HTTP 身份验证弹出窗口

我读过的大部分内容都建议将管理目录移到 Web 根目录之外,并使用 readfile 从 PHP 脚本访问文件,我不想这样做。该目录上有动态内容,也有静态内容。我知道 apache 会在加载任何资源之前触发 auth 弹出窗口,所以问题是如何让 apache 知道用户已经通过身份验证。还有其他建议/解决方法吗?

最佳答案

您可以使用 .htaccess 文件中的 SetEnvIf 变量来检查是否设置了某个 Cookie 值。例如(这不是很安全,只是为了说明):

AuthType Basic
AuthName "Protected Login"
AuthUserFile "/path/to/.htpasswd"
AuthGroupFile "/dev/null"
SetEnvIf Cookie PHPSESSID=.* PASS=1
Order deny,allow
Deny from all
Allow from env=PASS
Require valid-user
Satisfy any

SetEnvIf Cookie PHPSESSID=.* PASS=1 检查 Cookie 是否设置了 PHP session ID,如果是,则足以满足 身份验证如果这是真的,Allow from env=PASS 会跳过登录提示。

同样,这个例子不是很安全,因为在没有成功验证尝试的情况下调用 session_start() 时已经设置了 PHP session cookie,所以最好设置一个更隐蔽/随机的很难猜测的 cookie 值。例如:

SetEnvIf Cookie AJNC3Z921dmc4O8P2 PASS=1

这样,如果您在通过 PHP 成功验证后设置 AJNC3Z921dmc4O8P2 的 cookie 值,这将足以通过验证过程。请确保设置适当的 cookie 过期时间,以避免人们长时间无法通过登录提示。

关于PHP 和 .htaccess 身份验证解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14066697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com