停止直接访问文件

时间:2013-02-01 12:14:22

标签: php wordpress security download

我想知道,我为wordpress制作了一个php插件,它要求作为图像存储。如果您登录,则会看到您已分配的文件。然后单击下载并下载它们。

问题是,如果您知道URL,则无论如何都可以下载图像。如果用户知道其唯一的网址,我怎样才能轻松阻止用户下载图片,而只允许具有登录权限的用户查看该图片。

我的想法是:

  1. 检查引用网址的某种HTACCESS黑客
  2. 一种KEY系统,只允许在提供密钥时下载文件。
  3. 任何信息或想法都非常有用,谢谢。

3 个答案:

答案 0 :(得分:0)

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg|js|css)$ - [F]

请务必将“mydomain.com”替换为您自己的“mydomain.com”。上述代码在发生指定文件类型的热链接时创建失败的请求。对于图像,会显示损坏的图像。

答案 1 :(得分:0)

如果你让图片对于世界来说是不可读的(例如,在www dir之外的目录,或者只是用.htaccess阻止它(不需要推荐检查),你可以确定没有人可以访问你的图像。

然后通过检查凭据的文件(例如getImage.php?imageid=xxxx)提供您的图像,如果OK则读取图像(您的php进程可以读取图像,例如使用file_get_contents())然后提供它起来。

(使用正确的标题,你会没事的:header("content-type: image/your_image_type");

答案 2 :(得分:0)

要保护文件,您可以执行以下两项操作之一

  1. 将文件放在安全区域(公共可访问文件夹之外)。将其名称存储在数据库中,当somone点击下载时,您选择该文件并让他们下载。
  2. 永远不要将文件网址公开。当有人想要下载图像时,他们会点击下载,您可以使用时间戳来生成当时的唯一文件名,并使用别名文件名传输下载。显然该文件实际上不存在于服务器上。您只是拿起原始文件并更改其名称,以便当有人收到它时,他们将无法猜测其路径。但是,如果由于某种原因路径公开,那么他们可以访问该文件。
  3. 选项1主要用于人们存储文档签名等 如果您无法访问共享托管环境等文件夹,则可以使用选项2。