Php CodeIgniter-用户只能访问自己的图像

Php CodeIgniter-用户只能访问自己的图像,php,codeigniter,session,permissions,Php,Codeigniter,Session,Permissions,我目前正试图开发一个使用CodeIgniter的图像上传网站。 问题是,我今天遇到了一个问题,我真的非常感谢任何帮助来解决它 因此,基本上,网站正在运行。但问题是,这些文件不是私有的。用户可能希望确保用户上传的文件只有他们自己才能看到,而不是仅仅猜测一堆URL的人。(例如,user1上传他想保密的image1,因为他自己=>[localhostlocalhost/upload_script/files/image1.jpg],user2可以通过猜测并键入url[localhost/upload_

我目前正试图开发一个使用CodeIgniter的图像上传网站。 问题是,我今天遇到了一个问题,我真的非常感谢任何帮助来解决它

因此,基本上,网站正在运行。但问题是,这些文件不是私有的。用户可能希望确保用户上传的文件只有他们自己才能看到,而不是仅仅猜测一堆URL的人。(例如,user1上传他想保密的image1,因为他自己=>[localhostlocalhost/upload_script/files/image1.jpg],user2可以通过猜测并键入url[localhost/upload_script/files/image1.jpg]来访问image1,这是我们不希望发生的事情。) 我做了一些研究,我认为这可能需要另一个控制器来提供文件(检查会话数据)。 在过去的相当一段时间里,我一直在用PHP“玩”会话等,但我对CodeIgniter中的会话不太熟悉。 这是唯一的办法吗?我不认为我需要为每个用户创建单独的目录,是吗?你能告诉我怎么走到正确的方向吗?或者给我举个例子

提前感谢,


harris21

使用PHP返回图像并锁定Web服务器根目录后面的图像目录。这样,在提供映像之前,您可以通过会话变量检查用户凭据,确保允许用户查看映像。否则,您可以直接将用户重定向回网站,提醒他无法访问。像这样提供图像比仅仅通过Web服务器(apache、nginx等)提供图像要慢得多,但它将使您能够控制图像的下载

更确切地说,将图像详细信息保存在数据库中,例如包含以下列:id、file\u path、title、uid。每次用户想要下载图像时(例如呼叫),您都可以检查是否可以为当前登录的用户下载id为3的图像。您需要编写自己的控制器来执行此操作


我正在做一件类似的事情,你可以检查图像是如何被提供的。我允许缩略图图像,并为普通访问者可见的较大图像添加水印。

使用PHP返回图像并锁定Web服务器根目录后面的图像目录。这样,在提供映像之前,您可以通过会话变量检查用户凭据,确保允许用户查看映像。否则,您可以直接将用户重定向回网站,提醒他无法访问。像这样提供图像比仅仅通过Web服务器(apache、nginx等)提供图像要慢得多,但它将使您能够控制图像的下载

更确切地说,将图像详细信息保存在数据库中,例如包含以下列:id、file\u path、title、uid。每次用户想要下载图像时(例如呼叫),您都可以检查是否可以为当前登录的用户下载id为3的图像。您需要编写自己的控制器来执行此操作


我正在做一件类似的事情,你可以检查图像是如何被提供的。我允许缩略图像,并为普通访问者可见的较大图像添加水印。

唯一的方法是将图像存储在公共html之外。否则,根据定义,您将打开文件以直接访问

使用控制器检查是否允许用户访问该文件以及php函数readfile()来提供该文件

您可以在我的另一个问题中阅读一些代码:


这实际上是非常快的-你根本不会注意到性能的下降

唯一的方法是将图像存储在公共html之外。否则,根据定义,您将打开文件以直接访问

使用控制器检查是否允许用户访问该文件以及php函数readfile()来提供该文件

您可以在我的另一个问题中阅读一些代码:


这实际上是非常快的-你根本不会注意到性能的下降

为了保护文件,你需要将它们放在你的web根目录之外,否则人们总是能够通过url攻击来实现

我使用了非常方便的apache(如果您对服务器有这种访问权限的话),它将允许您提供受访问控制保护的文件,并且在没有适当凭据的情况下无法访问这些文件

可以放入CI控制器中以显示图像的代码段(改编自modxsendfile页面):


如果您无法安装modxsendfile,那么您唯一的其他选择就是使用Shift Exchange所说的
readfile()

为了保护文件,您需要将它们放在您的web根目录之外,否则人们总是能够通过url攻击来实现

我使用了非常方便的apache(如果您对服务器有这种访问权限的话),它将允许您提供受访问控制保护的文件,并且在没有适当凭据的情况下无法访问这些文件

可以放入CI控制器中以显示图像的代码段(改编自modxsendfile页面):


如果您无法安装modxsendfile,那么您唯一的其他选择就是使用Shift Exchange所说的
readfile()

在数据库中插入图像路径时,只需在用户列中添加用户id即可_id@raheelshan它不会保护图像。可能您需要为
img
标记创建一个帮助器,该标记将检查图像是否属于当前用户。图像可以放在web根目录之外,因此不会直接访问,但这可能会降低应用程序的速度,因为在这种情况下,您需要通过php提供图像script@AlexanderLarikov正如您所说的,如果所有图像都放在web根目录之外,应用程序将减慢速度。是否可以创建一个控制器来提供图像并检查图像权限?所以如果
...
if ($user->isLoggedIn())
{
    header("X-Sendfile: $path_to_somefile");
    header('Content-Type: image/jpeg');
    exit;
}