阻止使用浏览器url直接访问图片

我有一个名为 – 图像的文件夹。 该文件夹包含用户个人资料图片 现在用户可以随时通过将图像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的新手。 如果有办法做到这一点,请帮助。

提前致谢。

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

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.3倍的磁盘空间。
  • 更多的数据将通过网络发送〜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文件夹外。 每个用户甚至不同。
  • 图像可以在你的服务器之外使用(在论坛中,快速发送直接链接到你的朋友或类似的)

缺点

  • 符号链接必须事先创建(或即时)
  • 图像可以通过直接链接进行访问
    • 然而它几乎是无法猜测的
    • 也可以更改符号链接随机名期刊或更改形象权(我quess谷歌+这样做)
  • 地图原始名称→长随机名应存储在分贝(或sidecard /元文件)
    • (如果通过编码/解码将原始名称保留在长随机名称中,或者将原始名称+长随机名称组合在一起,则可以将其忽略)

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

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

情况2)似乎更加灵活。 但是我仍然不确定安全。 如果有人看到安全漏洞,请让我知道。