Php 登录用户必须能够访问文件和文件夹。如何保护文件不被未经授权的访问

Php 登录用户必须能够访问文件和文件夹。如何保护文件不被未经授权的访问,php,mysql,file,session,phpmyadmin,Php,Mysql,File,Session,Phpmyadmin,我正在构建一个基本的文件管理器,只是为了学习 该系统的工作原理: 1.用户注册。用户填写注册表时,使用唯一名称创建目录。此名称也存储在数据库中。 2.用户登录并访问用户创建的文件和文件夹 但我在这里遇到了一个问题。如果有人知道文件夹名称和文件路径的名称(可以从URL获取) 我想让它安全。只有loggedin用户可以访问这些文件和文件夹(创建文件夹和文件的用户)。 Register.php文件: <?php if(mysql_query("INSERT INTO user (UserId,

我正在构建一个基本的文件管理器,只是为了学习

该系统的工作原理: 1.用户注册。用户填写注册表时,使用唯一名称创建目录。此名称也存储在数据库中。 2.用户登录并访问用户创建的文件和文件夹

但我在这里遇到了一个问题。如果有人知道文件夹名称和文件路径的名称(可以从URL获取)

我想让它安全。只有loggedin用户可以访问这些文件和文件夹(创建文件夹和文件的用户)。 Register.php文件:

<?php
 if(mysql_query("INSERT INTO user (UserId,FirstName,LastName,UserDirectory,Email,Password,Gender,dob,ipaddress,dateTime) VALUES('$userid','$fname','$lname','$dir','$email','$upass','$gender','$dob','$ipaddress','$datetime')"))
   {    mkdir("file/$dir");
   mkdir  ("file/$dir/");

    header("location:dir.php");
   } ?>

您正在创建文件夹,但如果有人知道该URL,则可以访问该URL。您可以做的是只允许使用dir.php进行访问。通过这样做,您可以随时检查谁正在访问该文件夹

如果用户
john
拥有文件夹
/file/john
,则不应像使用桌面上的文件管理器那样直接访问该文件夹。有必要使用PHP文件访问该文件

因此,在
/file/.htaccess
中,您可以编写
Deny from all
来拒绝所有人通过Apache访问它。然后,在dir.php中,可以使用GET参数选择要显示的文件夹。如果有人试图访问
dir.php?folder=john
(仅举一个例子),则必须执行以下操作:

  • 获取
    /file/john
    数据库中的所有者(如果存在)
  • 获取已登录的用户
如果这两个用户是同一个人,则允许访问,否则拒绝

如果在会话中保存了用户id,则可以执行类似操作

//$idOfFolderOwner is the id in database of folder owner 
if ($_SESSION['idUser'] === $idOfFolderOwner) {
    //User is allowed 
} else {
    //User is not allowed
}

此外,要小心上传的文件,以避免安全问题。例如,如果john在
/file/john/
中上载了
.htaccess
包含
Allow from
,它将覆盖您自己的.htaccess。

您正在创建文件夹,但如果有人知道URL,它可以访问它。您可以做的是只允许使用dir.php进行访问。通过这样做,您可以随时检查谁正在访问该文件夹

如果用户
john
拥有文件夹
/file/john
,则不应像使用桌面上的文件管理器那样直接访问该文件夹。有必要使用PHP文件访问该文件

因此,在
/file/.htaccess
中,您可以编写
Deny from all
来拒绝所有人通过Apache访问它。然后,在dir.php中,可以使用GET参数选择要显示的文件夹。如果有人试图访问
dir.php?folder=john
(仅举一个例子),则必须执行以下操作:

  • 获取
    /file/john
    数据库中的所有者(如果存在)
  • 获取已登录的用户
如果这两个用户是同一个人,则允许访问,否则拒绝

如果在会话中保存了用户id,则可以执行类似操作

//$idOfFolderOwner is the id in database of folder owner 
if ($_SESSION['idUser'] === $idOfFolderOwner) {
    //User is allowed 
} else {
    //User is not allowed
}


此外,要小心上传的文件,以避免安全问题。例如,如果john在
/file/john/
中上载包含
Allow from
.htaccess
,它将覆盖您自己的.htaccess.

如果您想使其安全,这是第一件要做的事。完成后,从网站的根文件夹存储文件,然后使用fpassthrough发送文件,如@e4c5所述,更喜欢使用函数或,但避免使用mysql。我不确定是否理解您的问题,但您新创建的目录应该只能从dir.php访问。因此.htaccess应该阻止任何人访问内部。另外,在dir.php中,检查您的用户是唯一授权的用户。每个loggedin用户都创建自己的目录。我希望此目录只能由此文件夹的创建者访问。用户不应访问ASE目录/文件中的其他日志@Anthonybi如果你想确保mysql的安全,那是第一件要做的事。完成后,将文件存储在网站的根文件夹中,然后使用fpassthrough发送文件,如@e4c5所述,更喜欢使用函数或,但避免使用mysql。我不确定是否理解你的问题,但是您新创建的目录应该只能从dir.php访问。因此.htaccess应该阻止任何人访问内部。另外,在dir.php中,检查您的用户是唯一授权的用户。每个loggedin用户都创建自己的目录。我希望此目录只能由此文件夹的创建者访问。用户不应访问ASE目录/文件中的其他日志@AnthonyBIt是一个很好的解决方案。是否存在使用会话进行此操作的方法。谢谢@AnthonyB@UtamSharma如果您的用户已登录,则可能已将其保存在会话中。因此,在
dir.php
中,您可以使用此会话检查用户。如果我这样做,每个登录的用户都可以访问所有文件夹。但我想用这种个性化的方式。用户可以上载其个人文件,并且只能由文件/文件夹的所有者访问。和dropbox一模一样。你上传文件,只有你才能访问你的文件和文件夹@AnthonyBI添加了一个示例,您可以通过会话检查用户是否是文件夹的所有者。如果没有,就拒绝他。您应该在允许用户获取或查看任何文件夹/文件之前执行此检查。所以在dir.php中添加这个验证,这是一个非常好的解决方案。是否存在使用会话进行此操作的方法。谢谢@AnthonyB@UtamSharma如果您的用户已登录,则可能已将其保存在会话中。因此,在
dir.php
中,您可以使用此会话检查用户。如果我这样做,每个登录的用户都可以访问所有文件夹。但我想用这种个性化的方式。用户可以上载其个人文件,并且只能由文件/文件夹的所有者访问。和dropbox一模一样。你上传文件,只有你才能访问你的文件和文件夹@AnthonyBI添加了一个示例,您可以通过会话检查用户是否是文件夹的所有者。如果没有,就拒绝他。您应该在允许用户获取或查看任何文件夹/文件之前执行此检查。因此,在dir.php中添加此验证。