【问题标题】:Restricting images from direct url download限制直接 url 下载的图像
【发布时间】:2011-03-30 13:40:18
【问题描述】:

我不久前问过这个问题,得到了一个我认为可行的答案,但我仍然遇到问题。也许这是我做错了,但我仍然没有这个权利。

我想限制对整个目录的访问。该目录中包含图像和 pdf 文件。我需要创建一个指向 pdf 文档的链接并嵌入到锚标签中,即图像。我被告知为此使用标题。使用 header 立即输出对 pdf 文档非常有用的内容,但我必须从同一目录嵌入 3 个图像,这不起作用,因为 header 在 html 之前输出图像,这是正确的行为。

我需要一种将图像分配给变量的方法,以便在输出 html 后将其嵌入到我需要的位置。有什么想法吗?

这是我最后一个问题的链接。 How to restrict viewing files within a directory

【问题讨论】:

  • 你不能把这些图片放到另一个目录吗?
  • 没有 fabrik,目前还没有。这个网站相当大,我需要做很多工作才能将它们分开。
  • @fabrik 将可下载的东西放在一个单独的目录中,从http 无法访问,但移动到一个临时文件夹进行下载然后删除它是不是一个坏主意?
  • 你能把这个目录放在 DocumentRoot 之外吗?
  • 是的 Fabrik,我可以毫无问题地做到这一点。

标签: php


【解决方案1】:

将图像移到主机的公共文档根目录之外,或使用 .htaccess 之类的方式限制对它们的访问

<FilesMatch "\.(gif|png|jpe?g)$">
  Order Allow,Deny
  Deny from all
</FilesMatch>

并使用 PHP 脚本发送图像,该脚本将检查用户会话并仅在用户登录时发送图像。

//... your session checking routine just like in other scripts
if (!$logged) {
    //show error
    exit();
}

//Simple extention-to-mimetype map:
$mimetypes = array(
    '.jpg' => 'image/jpeg'
    '.jpeg'=> 'image/jpeg'
    '.pdf' => 'application/pdf'
    //add other extensions if needed
);

$file = basename($_GET['file']);    //preventing tricks with ../../anypath/anyfile
$ext = substr($file, strrpos($file, '.'));
if (file_exists($images_dir . $file) && isset($mimetypes[$ext]) ) {
    header('Content-Type: ' . $mimetypes[$ext]);
    echo file_get_contents($images_dir . $file);
} else {
    //show error
}

【讨论】:

  • Slava,如果我将图像移到 DocumentRoot 之外,在我的 php 脚本中,如何将它们回调?抱歉我太密集了,但我以前从来没有在它之外放任何东西。我只使用链接吗?
  • Slava,我只是尝试从 DocumentRoot 外部调用其中一张图像,但它没有显示。我看到的是一个显示零字节的损坏图像。
  • 好吧,在这种情况下,您只需将 PHP 脚本保存在通常可访问的目录中,并将文件名传递给它,就像我刚刚提供的示例一样,并将 $images_dir 定义为“../private_images/ " 带有相对于脚本的路径,或者像 "/var/www/yourhost/private_images" 带有绝对路径。
  • 我已经在使用绝对路径了。好吧,让我消化一下你上面写的内容,看看我是否能理解你告诉我的内容。
  • 关键是你让你的脚本每次运行都渲染一个图像。并且您的 HTML 请求带有诸如 http://www.example.com/getimage.php?file=image_name.jpg 之类的 URL 的图像
猜你喜欢
  • 2021-01-02
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多