登录用户必须可以访问文件和文件夹。如何保护文件免受未经授权的访问

时间:2016-12-27 10:26:21

标签: php mysql file session phpmyadmin

我正在建立一个基本的文件管理器,仅用于学习目的。

这个系统如何工作: 1.用户注册。用户填写注册表格是使用唯一名称创建的目录。这个名字也存储在数据库中。 2.用户登录和访问用户创建的文件和文件夹。

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

我想让它变得安全。只有登录用户才能访问这些文件和文件夹(谁创建文件夹和文件)。 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");
   } ?>

dir.php文件

<?php
session_start();
include_once 'dbconnect.php';

if(!isset($_SESSION['user']))
{
    header("Location: index.php");
}
$id = $_SESSION['user'];
//echo $id;
$res=mysql_query("SELECT * FROM user where UserId = '$id' ");
if(mysql_num_rows($res) > 0){ // if one or more rows are returned do following

            while($result = mysql_fetch_array($res)){

            ?>
<?php { { ?>


            <?php //path to directory to scan
$directory = "file/$mydir";

//get all files in specified directory
$files = glob($directory . "*");

//print each file name
foreach($files as $file)
{
 //check to see if the file is a folder/directory
 if(is_dir($file))
 { ?>
  <a href="<?php echo $file; ?>"> <br><?php echo $mydir; ?> </a> <?php
 }
}?>

因此,如果登录的用户只需键入文件路径即可轻松访问其他用户文件。 意味着文件或文件夹的lye创建者上的个性化文件夹和文件可以编辑/查看文件。 请求:此系统仅用于学习目的,我只想学习此​​任务。所以,如果你没有相关的解决方案,请不要评论mysqli和PDO评论。 在此先感谢:)

1 个答案:

答案 0 :(得分:2)

您正在创建文件夹,但如果有人知道该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在.htaccess中上传包含Allow from all的{​​{1}},则会覆盖您自己的.htaccess。