2

我有一个名为 - Images的文件夹。此文件夹包含用户个人资料图片。现在用户可以随时通过将图像 URL 复制到他的浏览器来查看他的图像。这样他也可以看到其他用户的个人资料照片。我想要实现的是 - 用户应该只能通过我网站上的 PHP 页面查看他的个人资料图片。如果用户直接放图片 URL,就不应该显示。

我尝试使用.htaccess 来实现这一点。这就是我在 .htaccess 文件中的内容:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mysite.com/
RewriteRule \.(gif|jpg)$ http://www.mysite.com/errorpost.jpg [R,L]

我是.htaccess 的新手。如果有办法实现这一点,请提供帮助。

提前致谢。

4

1 回答 1

3

我也有同样的问题。目前我找到了两种方法:

1) base64_encode() + ajax + js/jquery

  • 将 base64_encode() 编码的每个图像存储在二进制文件或数据库 OUTSIDE www 文件夹中。
  • 使用 ajax 获取该数据。它应该返回 "data:image/jpeg;base64,$enc_imgbinary"
  • 使用 js/jquery 将 'img' 属性的 'src' 替换为返回的结果

优点

  • 无法通过直接链接访问图像

缺点

  • 我没有发现类似的视频解决方案。
  • 图像应事先(或首次使用)编码,以尽量减少服务器 CPU 使用率。
  • 编码图像在磁盘上占用大约 30% 的空间 => 1.3 倍的磁盘空间
  • 如果您想在服务器上保留原始图像 => 2.3x 磁盘空间。
  • 大约 30% 的数据将通过网络发送

2)长随机名称(+符号链接)

A)使用长随机名称将图像存储在 www 文件夹中
B)将图像存储在 www 文件夹之外,并带有指向 www 文件夹的符号链接。(www 以外的图像也可以作为您的桌面图像备份)

笔记:

  • 文件夹还必须包含随机符号
  • 利用 '。' 在任何文件夹或文件名之前 => 以防万一,以防止在未配置的 apache 上显示文件夹内容
  • 在案例 B 中配置 apache 以遵循符号链接)(将 FlowSymlinks 添加到 httpd.conf)
  • 配置 apache 以防止文件夹内容列表(从 httpd.conf 中删除索引)
  • 图像层次结构示例:

    • 万维网
      • .media_jmdue7jed
        • .user1_hash_!sdfsewewfsdfsds
          • .album1_name_!jfie8e7y77667fef
            • .photo1_name_!kjio9i890v8fsd978fyreshf
            • .photo2_name_!09098dfuujdsif87s7ysdffd
            • ...
          • .album2_name_!ghhyuflp!huidfjh
            • .photo1_name_!feojihudhufuuhfrufhi8484
            • .photo2_name_!2344gfdgfdgdfefedw232sdg
            • ...
        • .user1_hash_!j333re89dsfdsf
          • ...

优点:

  • 也可以用于视频
  • 您仍然可以通过使用长随机名称创建指向 www 文件夹的符号链接,将原始图像保留在 www 文件夹之外。甚至对每个用户都不同。
  • 图片可以在您的服务器之外使用(在论坛中,快速发送直接链接给您的朋友或类似的)

缺点

  • 必须事先(或即时)创建符号链接
  • 可以通过直接链接访问图像
    • 但是几乎不可能猜到它
    • 您也可以定期更改符号链接随机名称或更改图像权限(我怀疑 google+ 会这样做)
  • map original-name → long-random-name 应该存储在 db (或 sidecard/meta 文件)
    • (如果您通过编码/解码或组合原始名称 + 长随机名称将原始名称保留在长随机名称中,则可以绕过)

======================================

我已经实现了案例 1),它对我来说很好,但是我没有为 HTML5 视频找到类似的解决方案。

案例 2) 似乎更灵活。但是我仍然不确定安全性。如果有人看到安全漏洞,请告诉我。

于 2013-05-08T08:50:07.667 回答