笨 - 用户只能访问他们自己的图像(CodeIgniter - Users should only

2019-09-20 09:47发布

我目前正在使用笨开发的图片上传网站。 关键是,我今天整个的问题来了,我真的很感激任何形式的帮助,以解决它。

所以基本上,该网站正在工作。 但事实是,这些文件是不公开的。 用户可能希望确保用户上传的文件才可见他们,而不是由别人谁只是猜测一串网址。 (例如,用户1上传他希望保持私有,为自己图像1 => [localhostlocalhost / upload_script /文件/ image1.jpg],用户2可以通过猜测,并键入URL来访问此搜索[本地主机/ upload_script /文件/ image1.jpg]这是我们不希望发生的。)我做了一些研究,我认为这可能会需要另一个控制器服务于文件(检查会话数据)。 在PHP中我一直在“玩”与会议等,在过去相当长的一段时间,但我并不笨那熟悉它们。 这是唯一的办法? 我不认为我需要为每个用户创建单独的目录,是吧? 你能告诉我如何前往正确的方向,或给我一个例子吗?

提前致谢,

harris21

Answer 1:

为了保护文件,你需要让他们到网站根之外,否则别人会总是能够网址破解他们的方式轮。

我已经使用了非常方便的mod_xsendfile的Apache(如果你有那种访问到您的服务器),这将允许您服务,可以通过访问控制保护,没有相应的凭据没有被访问的文件。

代码片断,你可以把你的CI控制器来显示图像(改编自mod_xsendfile页):

...
if ($user->isLoggedIn())
{
    header("X-Sendfile: $path_to_somefile");
    header('Content-Type: image/jpeg');
    exit;
}

如果您无法安装mod_xsendfile那么你唯一的选择是使用readfile()为TheShiftExchange说。



Answer 2:

使用PHP返回图像,并锁定了Web服务器根后面的图像目录。 通过这种方式,服务可以通过检查会话变量的用户凭据,保证他被允许观看图像的图像前。 否则,你可以将用户重定向直接回到网站提醒他,他不能访问。 服务相似图片不仅仅是通过网络服务器为他们提供服务(阿帕奇,Nginx等...),但它将使你有在图像上的下载控制方式速度较慢。

更确切地说,保存图像信息在数据库中,例如,具有列:ID,FILE_PATH,标题,UID。 每当一个用户想要下载例如调用图像http://domain.com/files/download/3您可以检查是否有编号3的图像可以下载在当前登录的用户。 你需要编写自己的控制器,将这样做。

我做了类似的事情在这里http://www.mediabox.si/您可以检查图像的方式提供服务。 我让缩略图和我水印普通访客显示较大的图像。



Answer 3:

唯一的办法就是将图像存储的public_html之外。 否则,根据定义你的文件打开直接访问。

使用控制器检查,如果用户被允许访问文件和PHP函数ReadFile的()来提供服务的文件

你可以在我这里的其他问题一个读了一些代码: 这是否PHP函数防止文件横向?

这其实是非常快的 - 你不会注意到性能的下降,在所有



文章来源: CodeIgniter - Users should only have access to their own images