我有一个名为 - 的文件夹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 的新手。如果有办法实现这一点,请帮忙。
提前致谢。
我也有同样的问题。目前我找到了2种方法:
1)base64_encode() + ajax + js/jquery
- 将由 base64_encode() 编码的每个图像存储在 www 文件夹之外的二进制文件或数据库中。
- 使用ajax 来获取该数据。它应该返回“data:image/jpeg;base64,$enc_imgbinary”
- 使用js/jquery将'img'属性的'src'替换为返回结果
pros
cons
- 我没有找到类似的视频解决方案。
- 图像应事先(或首次使用)进行编码,以尽量减少服务器 CPU 的使用。
- 编码图像占用磁盘空间约 30% => 1.3 倍磁盘空间
- 如果你想在服务器上保留原始图像=> 2.3x磁盘空间。
- ~30% 的数据将通过网络发送
2) 长随机名称(+符号链接)
A) 使用长随机名称将图像存储在 www 文件夹中
B) 将图像存储在 www 文件夹之外,并带有指向 www 文件夹的符号链接。
(www 之外的图像也可以作为桌面图像备份)
notes:
- 文件夹还必须包含随机符号
- 使用 '。'在任何文件夹或文件名之前 => 以防万一,防止在未配置的 apache 上显示文件夹内容
- 配置 apache 在情况 B) 中遵循符号链接(将 Flow 符号链接添加到 httpd.conf)
- 配置 apache 以阻止文件夹内容列出(从 httpd.conf 中删除索引)
-
图像层次结构示例:
- www
- .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
pros:
- 也可用于视频
- 您仍然可以通过使用长随机名称创建指向 www 文件夹的符号链接,将具有原始名称的原始图像保留在 www 文件夹之外。甚至每个用户都不同。
- 图像可以在您的服务器外部使用(在论坛中,快速发送直接链接给您的朋友或类似的人)
cons
- 符号链接必须预先创建(或即时创建)
- Image can be accessed with direct link
- 然而几乎不可能猜到它
- 您还可以定期更改符号链接随机名称或更改图像版权(我猜 google+ 会这样做)
- map original-name → long-random-name should be stored in db (or sidecard/meta file)
- (如果通过编码/解码或组合原始名称+长随机名称将原始名称保留在长随机名称中,则可以绕过)
=======================================
我已经实现了案例 1),它对我来说效果很好,但是我没有找到类似的 HTML5 视频解决方案。
情况2)似乎更灵活。但是我仍然不确定安全性。
如果有人发现安全漏洞,请告诉我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)