PHP和.htaccess认证解决方案

2024-05-13

这是布局:

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

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

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

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


您可以使用SetEnvIf.htaccess 文件中的变量来检查是否设置了某个 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 会话 ID,如果是,则足以Satisfy认证过程和Allow from env=PASS如果这是真的,则使其跳过登录提示。

同样,这个例子不是很安全,因为 PHP 会话 cookie 已经在以下情况下设置:session_start()在没有成功进行身份验证尝试的情况下调用,因此最好设置一个难以猜测的更神秘/随机的 cookie 值。例如:

SetEnvIf Cookie AJNC3Z921dmc4O8P2 PASS=1

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP和.htaccess认证解决方案 的相关文章

随机推荐

  • 将数值数据更改为分类数据 - Pandas [重复]

    这个问题在这里已经有答案了 我有一个 pandas 数据框 其中有一个数字列 金额 金额从 0 到 20000 不等 我想将其更改为定义范围的分类变量 因此 分类变量将是 0 1000 之间 1000 2000 美元之间 依此类推 直到 1
  • 多个where条件codeigniter

    如何将此查询转换为活动记录 UPDATE table user SET email email last ip last ip where username username and status status 我尝试将上面的查询转换为 d
  • JavascriptCore:在 JSExport 中将 javascript 函数作为参数传递

    JavascriptCore是iOS7中支持的新框架 我们可以使用 JSExport 协议将 objc 类的部分内容公开给 JavaScript 在javascript中 我尝试将函数作为参数传递 像这样 function getJsonC
  • dmvnorm MVN 密度 - RcppArmadillo 实现比 R 包慢,包括一些 Fortran

    The solution现已上线RCPP画廊 http gallery rcpp org articles dmvnorm arma 我从 RcppArmadillo 中的 mvtnorm 包重新实现了 dmvnorm 我有点喜欢犰狳 但我
  • docker-compose mysql 容器拒绝访问 wordpress 容器

    我遇到 mysql 5 7 容器拒绝访问 wordpress 容器的问题 我正在使用 docker compose 并且在 Mac OSX 上运行 docker Docker 应该是可用的最新版本 这是我的 docker compose y
  • Python 和 sqlite3.ProgrammingError:不允许递归使用游标

    我写了一个像这样的Python程序 它应该在多线程模式下运行 def Func host cursor db cursor execute SELECT If index Username Version Community Ip traf
  • 如何检查是否启用了更改跟踪

    我试图在运行之前确定我的数据库是否已启用更改跟踪ALTER DATABASE命令来启用它 我试图防止这些脚本多次运行时出现错误 我签到了sys databases and sys dm tran commit table但无法找到我要找的东
  • 在 React.js 中有条件地设置 html 属性

    我在为 React 中的单选按钮组件设置默认选项时遇到了令人惊讶的困难 这是我的RadioToggle成分 jsx React DOM var RadioToggle React createClass render function va
  • VideoCamera 获取支持的分辨率

    我使用 DirectShow 库 DirectShowLib 2005 dll 和 C 来捕获摄像机图像 当我定义捕获对象的大小时 我有以下参数 const int VIDEOWIDTH 640 Depends on video devic
  • std::enable_if 和 std::enable_if_t 有什么区别?

    C 14 引入std enable if t 它和有什么区别std enable if 使用上有什么优点或者区别吗std enable if t std enable if t 是 std enable if 的内部 type 的类型别名
  • 使用 Boost:Asio 的游戏服务器如何异步工作?

    我正在尝试创建一个游戏服务器 目前我正在使用线程来制作它 每个对象 玩家 怪物 都有自己的带有 while 1 循环的线程 在其中执行特定的功能 服务器基本上是这样工作的 main some initialization while 1 r
  • Mockito - thenReturn 始终返回 null 对象

    我正在尝试实现 Mockito 来测试特定方法 但 thenReturn 似乎总是返回一个 null 对象 而不是我想要的 CUT public class TestClassFacade injected via Spring priva
  • 如何通过 NUnit 有效地对使用 ADO.NET 和 SQL Server 的 DAL 进行单元测试?

    因此 您在 C 中有一个使用存储库模式的 DAL 并且每个存储库都有一个接口 它由 ADO NET MS SQL Server 和存储过程调用支持 这对于在进行单元测试时对正在其他地方使用的存储库进行存根 模拟非常有用 我喜欢它 不过 我很
  • OpenCV 2.3 与 VS 2008 - 鼠标事件

    强制性 我是新手 有一份涉及编程的工作 并且我一边工作一边自学 不用说 作为一名老师 我经常犯彻底的错误 我现在所处的位置 我创建了 Graph 类 它 令人惊讶的是 制作了图表 但现在我想通过单击鼠标来修改图形 但我似乎无法让鼠标处理程序
  • UITableViewCell 内的 UIPageViewController

    嘿我想问如何在 UITableViewCell 内实现 UIPageViewController 我一直在阅读周围的内容 但到目前为止似乎对任何尝试的人都不起作用 我希望得到一些提示 不需要完整的答案 谢谢 目前还不清楚你到底想做什么 但让
  • 如何在我的 Lua 脚本中添加“睡眠”或“等待”?

    我正在尝试通过更改一天中的时间来为游戏制作一个简单的脚本 但我想快速完成 这就是我要说的 function disco hour minute setTime 1 0 SLEEP setTime 2 0 SLEEP setTime 3 0
  • 图像上的文字

    是否可以在 php 中动态地将文本放置在图像上 然后将其发送到 rss feed 是的 可以使用GD http www php net gd函数或图像魔术师 http www php net imagemagick功能 具体取决于您的服务器
  • MyISAM 方言生成错误的 DDL

    我们使用 MyISAM 方言org hibernate dialect MySQLMyISAMDialect使用JPA2自动生成DDL文件3 6 9 FinalMySQL 5 5 数据库上的 hibernate 提供程序 The creat
  • UIView 框架更改时阴影层不调整大小

    问题图像截图 https i stack imgur com cyc5o png class ViewController UIViewController var shadow UIView override func viewDidLo
  • PHP和.htaccess认证解决方案

    这是布局 web root admin dir index php js img other files dirs dir files 到目前为止 我使用 htaccess passwd 保护管理目录 因为我希望对该目录中的所有文件 包括