Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用htaccess的图片隐私_Php_Html_.htaccess - Fatal编程技术网

Php 使用htaccess的图片隐私

Php 使用htaccess的图片隐私,php,html,.htaccess,Php,Html,.htaccess,我正在制作一个社交网站,人们可以发布只有朋友才能看到的照片。我将图像存储在名为“照片”的文件夹中。我希望图像只能通过html标记img查看,因此如果有人直接在浏览器中键入img url,我希望它返回403/404或其他内容。如何使用htaccess完成此操作?据我所知(如果你知道其他情况,请有人纠正我),这在htaccess中是不可能的,因为需要知道你的朋友是谁才能让他们看到图像 相反,您必须使用PHP之类的工具进行一些cookie身份验证,以确定请求者是谁,然后与图像所有者检查他们的朋友/共同

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

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

相反,您必须使用PHP之类的工具进行一些cookie身份验证,以确定请求者是谁,然后与图像所有者检查他们的朋友/共同朋友等,如果允许他们查看图像,则以这种方式提供图像。不过,这是一个非常繁重的过程(像现在这样提供静态图像已经够难了!),所以一般的技术是使用长而笨拙的URL,这样它们就不会被别人猜到,就这样不管了(也就是说,允许你试图阻止的内容)

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

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


从根本上说,没有什么能阻止人们直接拍摄屏幕截图或许多图像网站上流行的截图。

其他答案恰当地指出,使用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="/imgsrc.php?file=path/to/image.png" />

以上各项都没有经过测试,但您应该了解搜索阻止图像热链接的想法。不知道具体怎么做,但这会给你一些相关的答案。你提出的方法无法完成任务。您需要在应用程序层处理这种访问。否则,有人很容易伪造推荐人的标题并撕毁您的所有图像。您无法可靠地分辨浏览器在页面加载时发出GET请求与有人将URL放入浏览器地址框之间的区别。尝试使用.htaccess应用安全性可能会使您失败。您最好将图像指向一个PHP脚本,该脚本可以在返回图像之前检查登录状态和访问权限。@Mike-您可以使用Http“Referer”头稍微修改一下,但这充其量是不可靠的。@LukeBriggs-我引用:“您无法可靠地判断…”我只是想让.htaccess使图像只通过img标记可见,而不是直接通过浏览器中的url可见。不幸的是,这也是不可能的,因为htaccess无法区分img标记和选项卡之间的区别-但是,您可以查看Http Referer标头,它将在img标记中设置为主页,而对于选项卡则为空白,但是它很容易被欺骗;根据您的“用户允许访问”功能,可能无法阻止某人使用相对路径让您的服务器提供应隐藏的内容:
Order deny, allow
Deny from all
Allow from localhost