7

如何将类似登录功能设计为使用 suPHP 的文件权限。例如,如果我有一个网站,www.example.com以下两个用户有自己的主目录,每个用户都有一个 php script test.php,以及一个validateUser.php属于目录中另一个用户(root、www-data、apache ...)的脚本/home

/家/
├── 验证用户.php
├── 用户1
│ └── test.php
└── 用户2
    └── test.php

user1可以user2's通过访问来访问脚本www.example.com/user2/test.php,反之亦然。相反,我想要的是使用mod_rewrite 之类的东西将所有传入请求引导到validateUser.php. 但是,这样做会导致以所有者身份执行所有脚本validateUser.php,而不是目标test.php脚本。

无论如何在 suPHP 启动之前调用 php 脚本,然后允许 suPHP 继续,或完全中止。


编辑这是我提出的第二个赏金。我第一次给古斯塔夫 b/c 他给出了一个很好的部分答案。我会提到到目前为止我所做的尝试,以及为什么它们都不适合我。

1)我尝试使用mod_rewrite将 URL 重定向validateUser.php到登录用户或调用他们想要调用的任何脚本。问题是我已经设置了我的虚拟主机,以便每个用户都有自己的虚拟站点(即www.user1.example.comwww.user2.example.com......如果这是一种糟糕的设计方法,请随意粗鲁地指出)。因此,虽然OS看到文件结构如上,但在网上,根目录是这样设置的

VirtualHost = www.user1.example.com
├── validateUser.php
└── test.php
VirtualHost = www.user2.example.com
├── validateUser.php
└── test.php

自然,我只是将副本移动validateUser.php到每个用户的目录中。问题是现在用户可以删除该文件并将他们想要的任何内容放在那里,就像根本不需要登录一样。解决此问题的一种方法是使主文件夹具有粘性(我不建议对主文件夹执行此操作)并使其validateUser.php归根目录所有。但现在它会以 root 身份执行,因为这是 suPHP。那是我放弃的地方。

2)我可以使用古斯塔夫的mod_auth建议,但我不喜欢它要求预先输入密码(就像旧学校的网站一样)。

3) 如果我可以在虚拟主机之间重定向,我已经考虑过 1) 的变体。例如,像这样重组虚拟主机

VirtualHost = www.user1.example.com
└── test.php
VirtualHost = www.user2.example.com
└── test.php
VirtualHost = www.admin.example.com
└── validateUser.php

然后使用 mod_rewrite 将用户的所有流量重定向到www.admin.example.com/validateUser.php,如果用户已登录(或登录成功),则用户将被重定向回他们最初尝试登录的站点。这样做的好处是,如果可能的话,suPHP 不会启动,直到用户被引导回他们自己的虚拟主机。

4

1 回答 1

2

您是否考虑过使用mod_auth实现用户身份验证?如果您决定尝试一下,这里有一个您可能会觉得有用的指南。

Apache 2.2 等价物:

请注意,浏览器会存储凭据,并将它们与您发出的每个请求一起发送到标头中。

于 2011-11-15T13:05:04.213 回答