使用htaccess保护图片隐私

时间:2013-10-12 23:51:41

标签: php html .htaccess

我正在建立一个社交网站,人们可以发布只有他们的朋友才能看到的照片。我将图像存储在一个名为photos的文件夹中。我希望图像只能通过html标签img查看,所以如果有人直接在浏览器中输入img url我希望它返回403/404或其他什么。如何用htaccess完成这项工作?

2 个答案:

答案 0 :(得分:0)

据我所知(有人请你纠正我,如果你不知道的话),这是不可能的htaccess ,因为它需要知道你的朋友是谁让他们看到图像。

相反,您必须使用PHP之类的cookie进行身份验证,以找出请求者是谁,然后检查他们的朋友/共同朋友是否与图像所有者一起,并在允许的情况下以这种方式提供图像看见了。这是一个极其征税过程(因为它们很难提供静态图像!),所以一般的技术是使用长而笨拙的URL,所以它们不能被某人猜到并留在(即允许你想要阻止的东西)。

或者,再次使用PHP,检查HTTP_REFERER标头。如果从页面内请求,则会将其设置为您的页面URL。否则它将是空白或其他。这是不可靠的 - 有些浏览器根本不发送它,无论如何都很容易伪造。

或者,您可以强制执行时间窗口,其中只能在初始页面加载的10秒内请求图像。这对于缓慢连接的人来说是不好的。

从根本上说,没有什么可以阻止某人在许多成像网站上截取屏幕截图,直接拍摄屏幕照片。

答案 1 :(得分:0)

你不能用htaccess这样做,正如其他答案所恰当指出的那样,你可以创建一个控制谁可以访问图像的php脚本,我们称之为imgsrc.php

$file = $_GET['file'];

if(user_allowed_access($file)){
  $ext = substr($file, strrpos($file, '.') + 1);
  header('Content-type: image/' . $ext);
  readfile($file);
} else {
  header('Content-type: image/png');
  readfile('some/default/file.png');
}

然后,您的<img>标记有src

<img src="/imgsrc.php?file=path/to/image.png" />

然后在.htaccess中为图像目录放置

Order deny, allow
Deny from all
Allow from localhost

以上都没有经过测试,但你应该明白这个想法