PHP 每个用户的子文件夹 "type"
PHP subfolder for each user "type"
我在 upload
文件夹中有 3 个子文件夹。我的代码如下所示:
if(isset($_SESSION["u_type"]) && $_SESSION["u_type"] == 3) {
$files = scandir($path."/3/") //$path is set somewhere above
//...
}
它工作正常,但您实际上可以添加一个简单的 html 标记,例如 <img src="uploads/2/somathing.png/>
,即使您的“用户类型”设置为 3,您也可以从子目录 2 获取任何文件。
有什么办法可以预防吗?
我已经试过了:
我正在使用其中包含 Options- Indexes
的 .htacces,但它只会破坏文件的直接列表。
是的,有一种方法可以做到这一点,它需要 Apache 网络服务器(用于 .htaccess 文件):
拒绝所有上传文件夹
将此添加到 .htaccess
中的上传文件夹:
order deny,allow
deny from all
创建代理php脚本image.php
创建一个名为 image.php
的脚本并在其中检查您的会话:
(您可能需要根据您的要求更新此脚本,这是一个仅支持 jpeg 的简单示例)。
<?php
session_start();
//check session for permission here!
$userTypeId = 1; //change this to requirements
header('Content-type: image/jpeg');
echo file_get_contents("uploads/" . $userTypeId . "/" . $_GET['image']);
现在通过访问代理脚本访问图片
<img src="image.php?image=yourimage.jpg" />
更新;您可以选择重写 image.php?image=x.jpg
您可以选择用 .htaccess
重写此路径,这样就好像没有代理 .php
脚本在工作。
RewriteRule ^/a_chosen_path_name/([^\.]+)\.(png|jpg|gif)$ /image.php?image=. [NC,L]
之后您可以使用:
<img src="a_chosen_path_name/yourimage.jpg" />
我在 upload
文件夹中有 3 个子文件夹。我的代码如下所示:
if(isset($_SESSION["u_type"]) && $_SESSION["u_type"] == 3) {
$files = scandir($path."/3/") //$path is set somewhere above
//...
}
它工作正常,但您实际上可以添加一个简单的 html 标记,例如 <img src="uploads/2/somathing.png/>
,即使您的“用户类型”设置为 3,您也可以从子目录 2 获取任何文件。
有什么办法可以预防吗?
我已经试过了:
我正在使用其中包含 Options- Indexes
的 .htacces,但它只会破坏文件的直接列表。
是的,有一种方法可以做到这一点,它需要 Apache 网络服务器(用于 .htaccess 文件):
拒绝所有上传文件夹
将此添加到 .htaccess
中的上传文件夹:
order deny,allow
deny from all
创建代理php脚本image.php
创建一个名为 image.php
的脚本并在其中检查您的会话:
(您可能需要根据您的要求更新此脚本,这是一个仅支持 jpeg 的简单示例)。
<?php
session_start();
//check session for permission here!
$userTypeId = 1; //change this to requirements
header('Content-type: image/jpeg');
echo file_get_contents("uploads/" . $userTypeId . "/" . $_GET['image']);
现在通过访问代理脚本访问图片
<img src="image.php?image=yourimage.jpg" />
更新;您可以选择重写 image.php?image=x.jpg
您可以选择用 .htaccess
重写此路径,这样就好像没有代理 .php
脚本在工作。
RewriteRule ^/a_chosen_path_name/([^\.]+)\.(png|jpg|gif)$ /image.php?image=. [NC,L]
之后您可以使用:
<img src="a_chosen_path_name/yourimage.jpg" />