我在here之前问了这个问题,但是用户CheekySoft指出我“在询问如何实施我的建议的解决方案”,而我应该“陈述我的问题”并提出解决方案的想法“。所以这里。
在linux服务器上,我有像这样设置的文件
/home
├── user1
│ ├── [-rwx------] index.html
│ └── [-rwx------] index.php
└── user2
├── [-rwx------] index.html
└── [-rwx------] index.php
如果我在
设置了Apache虚拟主机<Directory /home/user1>`
<Directory /home/user2>
然后[任意]用户可以转到www.example.com/user1/index.html
或www.example.com/user2/index.html
。但是,这些文件的权限为0700
,因此,它们无法通过Web访问。因此我正在使用suPHP。
为了论证,我们可以说index.php
只有以下内容
的index.php:
<?php
echo file_get_contents('index.html');
exit();
?>
现在,设置suPHP后,user1可以转到www.example.com/user1/index.php
查看index.html
。同样,user2可以转到www.example.com/user2/index.php
查看index.html
。但是,user1可以同时转到www.example.com/user2/index.php
查看user2的index.html
页面,反之亦然#2。
解决这个问题的自然方法是PHP sessions。对页面的所有请求都被重定向到主页面(即www.facebook.com
),用户将根据数据库进行验证,然后重定向到正确的页面(参见下图)。
用户将转到某个页面(即www.example.com/page1.html
),然后会有第1页硬编码的一部分,以确保存在有效会话。如果存在,则加载页面。如果它不存在,则会将用户重定向到index.html
。登录并建立有效会话后,会将其重定向回原始页面。我们可以修改index.php
来执行此操作:
indexValidate.php:
<?php
//this is purely pseudo code, I can't guarantee it will work
session_start();
require_once 'Session_Validator.php';
$sv = new Session_Validator();
$sv->validate($un, $pwd);
echo file_get_contents('index.html');
exit();
?>
但是,在我的设计中,这些页面(page1.html
,page2.html
...)位于用户自己的目录(index.html
,index.php
)中,因此,服务器不能要求他们有这个硬编码部分检查有效部分。用户可以简单地编辑文件以删除此部分。当然这对用户来说是愚蠢的,但我不希望用户必须修改他们的每一个文件,以便在顶部有一个会话检查部分。我希望这是无缝的。
一些注意事项:
validateUser.php
脚本,然后验证用户是否有效,调用所请求的原始脚本。但是,这有副作用,suPHP现在已经切换到用户,很可能是var-www
任何人都可以为我的问题提供解决方案吗?
答案 0 :(得分:1)
如何为所有用户创建apache重写规则,并为所有PHP
个页面创建一个HTML
包装器
RewriteRule可能类似于:
RewriteCond %{REQUEST_URI} !^/auth
RewriteRule ^(.*) /auth/wrapper.php?uri=$1
在wrapper.php
:
/auth/validate.php?redirect=<where-I-came-from>
如果已经过验证,请加载uri=<...>
echo file_get_contents('<...>');
编辑: 您可以创建指向wrapper.php的符号链接,然后在符号链接上设置对用户的权限。你可以在auth文件夹中执行此操作:
ln -s wrapper.php username1.php
chown -h username1:username1 username1.php
然后你会得到一个像这样的文件夹:
-r--r--r--. 1 var-www var-www 15 march 3 12:45 wrapper.php
lrwxrwxrwx. 1 username1 username1 17 march 3 12:47 username1.php -> wrapper.php
lrwxrwxrwx. 1 username2 username2 17 march 3 12:52 username2.php -> wrapper.php
lrwxrwxrwx. 1 username3 username3 17 march 3 12:52 username3.php -> wrapper.php
请注意:用户必须能够阅读auth目录 为了使其更安全,您可以将wrapper.php放在一个单独的目录中。