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" />