Php 禁止使用浏览器url直接访问图像

Php 禁止使用浏览器url直接访问图像,php,apache,.htaccess,hotlinking,Php,Apache,.htaccess,Hotlinking,我有一个名为-Images的文件夹。此文件夹包含用户配置文件图片。现在,用户只需随时将图像URL复制到浏览器即可查看其图像。这样他也可以看到其他用户的个人资料图片。我想要实现的是——用户应该只能通过我网站上的PHP页面看到他的个人资料图片。如果用户直接输入图像URL,则不应显示图像URL 我试图使用.htaccess实现这一点。这是我在.htaccess文件中的内容: RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{H

我有一个名为-Images的文件夹。此文件夹包含用户配置文件图片。现在,用户只需随时将图像URL复制到浏览器即可查看其图像。这样他也可以看到其他用户的个人资料图片。我想要实现的是——用户应该只能通过我网站上的PHP页面看到他的个人资料图片。如果用户直接输入图像URL,则不应显示图像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。如果有办法做到这一点,请帮助


提前谢谢。

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

1)base64_encode()+ajax+js/jquery

  • 将base64_encode()编码的每个图像存储在二进制文件或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上显示文件夹内容
  • 将apache配置为案例B中的follow符号链接(将FlowSymlinks添加到httpd.conf)
  • 配置apache以防止文件夹内容列表(从httpd.conf中删除索引)
  • 图像层次结构示例:

    • 万维网
      • .media_jmdue7jed
        • .user1\u散列\u!SDFSEWFWSDFSDS
          • .album1\u name\u!jfie8e7y77667fef
            • .photo1_name_!kjio9i890v8fsd978fyreshf
            • .photo2_name_!09098dfuujdsif87s7ysdffd
          • .album2\u name\u!Ghyuflp!huidfjh
            • .photo1_name_!Feojihudhuuhfrufhi8484
            • .photo2_name_!2344GFDGDFEFEDW232SDG
        • .user1\u散列\u!j333re89dsfdsf
优点:

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

  • 符号链接必须事先创建(或动态创建)
  • 图像可以通过直接链接访问
    • 然而,这几乎是不可能的猜测
    • 您还可以定期更改符号链接随机名称或更改图像权限(我要求google+这样做)
  • 地图原名→ 长随机名称应存储在db(或sidecard/meta文件)中
    • (如果通过编码/解码或结合原始名称+长随机名称将原始名称保留在长随机名称中,则可以绕过此选项)
=====================================

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

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

我使用的上述方法不起作用。当键入图像url时,它仍然显示图像。查看这是否有助于您:您希望解决的问题是什么。你想阻止人们查看不允许他们查看的个人资料图像吗?@Gerben。。假设我正在查看我的个人资料。通过查看源代码,我可以看到我的个人资料图片的图像位置。然后我将该url粘贴到地址栏,图像就会打开。现在我希望用户不能通过这种方式直接访问图像。是否可以限制用户直接查看图像。应该允许他使用我创建的PHP页面作为配置文件页面来查看图像。这样他就猜不到其他用户的url,也看不到他们的图像。为个人资料图像生成伪随机文件名应该可以解决这个问题。e、 g.使用配置文件id的md5作为图像文件名。