Php 保护用户';正在访问文件,因此只有所有者才能访问?

Php 保护用户';正在访问文件,因此只有所有者才能访问?,php,security,file,Php,Security,File,我正在用php编写一个web应用程序,用户可以上传自己的文件或图像,但如何保护这些文件不被所有者以外的其他人访问。想想dropbox,保护这些文件的机制是什么,我已经尝试过搜索,但没有得到任何信息。任何指向教程的指针或链接都非常有用。提前感谢。如果您将图像和文件作为二进制blob存储在数据库中,那么只需在从数据库检索和显示之前检查登录用户的权限即可 如果要将它们存储为常规文件,则需要将它们存储在网站的文档根目录之上,而这些文档根目录在web上不可公开访问。然后,为了检索图像,在从数据库中检查正确

我正在用php编写一个web应用程序,用户可以上传自己的文件或图像,但如何保护这些文件不被所有者以外的其他人访问。想想dropbox,保护这些文件的机制是什么,我已经尝试过搜索,但没有得到任何信息。任何指向教程的指针或链接都非常有用。提前感谢。

如果您将图像和文件作为二进制blob存储在数据库中,那么只需在从数据库检索和显示之前检查登录用户的权限即可

如果要将它们存储为常规文件,则需要将它们存储在网站的文档根目录之上,而这些文档根目录在web上不可公开访问。然后,为了检索图像,在从数据库中检查正确的所有权之后(我们不知道您的体系结构,所以不管您存储了属于谁的内容),PHP可以检索文件并将其发送到具有正确标题的浏览器

例如,要显示图像,请执行以下操作:

// Check permissions...
// If permissions OK:
$img = file_get_contents("/path/to/image.jpg");

// Send jpeg headers
header("Content-type: image/jpeg");
// Dump out the image data.
echo $img;
exit();

例如,您可以保留一个与用户ID匹配的文件名数据库表,以跟踪谁拥有什么。

通常的方法是

  • 上传了一个文件
  • 文件被移动到无法从internet访问的目录
  • 为文件生成一个ID并存储在数据库中
然后,用户使用ID从服务器请求文件

为此,您将拥有一个脚本,该脚本根据ID查询数据库中的文件,然后检查用户是否有权读取该文件。如果用户有访问权限,它将读取文件并将其输出到用户的浏览器

例如,要在PHP中读取jpeg图像:

<?php
header('Content-type: image/jpg');
readfile('/path/to/image.jpg');

使用唯一和特殊的文件名,并仅向指定用户显示它们。
您还可以在PHP中设置一个会话,并检查会话是否正确以包含文件。并使用httacces重定向到PHP

<?
sessuion_start();
file_exists($_SESSION['specialkey']_$_GET['realfilename']){
include(/* include the file */); // or readfile
//or header location, but then the rteal URL will become visible
}else{
die('acces denied');
}

如果对图像使用
包含
,则不会显示图像。我不会投反对票,但这不是一个好答案。管理员可以访问dropbox中的文件,而不仅仅是文件的所有者。谢谢你的回答,1 upvote,但是Michael的答案更全面。所以我接受他的建议。