-1

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

4

2 回答 2

0

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

相反,您必须使用 PHP 之类的东西进行一些 cookie 身份验证,以找出请求者是谁,然后检查他们的朋友/共同朋友等是否与图像所有者,如果允许他们查看图像,则以这种方式提供图像. 虽然这是一个非常费力的过程(提供静态图像已经够难了!),所以一般技术是使用长而笨拙的 URL,这样他们就不会被别人猜到,然后就这样(即允许你做的)重新试图阻止)。

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

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

从根本上说,没有什么能阻止有人截屏,或者在许多成像网站上流行的截屏,直接给屏幕拍照。

于 2013-10-12T23:58:31.357 回答
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

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

于 2013-10-13T01:29:48.893 回答