我正在建立一个社交网站,人们可以发布只有他们的朋友才能看到的照片。我将图像存储在一个名为photos的文件夹中。我希望图像只能通过html标签img查看,所以如果有人直接在浏览器中输入img url我希望它返回403/404或其他什么。如何用htaccess完成这项工作?
答案 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
以上都没有经过测试,但你应该明白这个想法