2013-07-23 16 views
0

想象一下,我的网络空间上有一个图像文件secretImage.png,我希望多个用户有权访问index.php上的此图像。这很容易做到:如何阻止用户通过URL查看图像?

// index.php 
if($userIsAllowed) echo '<img src="secretImage.png" />'; 

的问题是,用户可以在理论上仍然通过直接浏览到www.myDomain.com/secretImage.png访问图像。有没有办法阻止他们这样做,以便只能在index.php内查看图像?

+0

默默无闻的“安全性”:使秘密图像URL“无法猜测”,防止列表,并确保只有一些人获得URL。一旦URL被泄露,猫就会出现(尽管它也可能是一个* nonce资源)。身份验证:*需要*身份验证并拒绝未经身份验证的查询。虽然也有[Referer](https://en.wikipedia.org/wiki/HTTP_referer)为首,这就增加了*额外的安全性,并且很容易被欺骗。 – user2246674

+0

(一个临时资源/资源标识符是临时存在的一个资源/资源标识符,一旦使用nonce资源被提取的帐户 - 如果是一个真正的nonce - 或超时已经过去,它不能再次用于获取资源:在一个微不足道的情况下,数据库会将现时资源转换为物理资源 - 并以leu为服务器进行服务 - 而不会泄露或允许直接访问“真实”资源。这与要求认证的含义不同。) – user2246674

回答

0

您可以使用htaccess通过.php文件路由指定文件夹的所有请求。在文件中,您可以确定用户是否可以看到文件,如果是,请提供正确的标题和图像。如果没有,显示任何你想要的(404,占位符图像)。

0

HTTP调用GET /secretImage.png本身需要认证。例如,您可以使用基本身份验证,并让用户发送一个Authorization: {base64 user:password}标题。

+0

@ user2246674啊对。匆忙,我以为我在看JavaScript,而不是PHP。 –

0

通过fpassthru即成从一个php文件你的形象,你检查允许用户

因此,例如,你可能有一个PHP文件,getimage.php,接受像“?形象= mysecretimage查询字符串.png“,如果用户被允许,它会通过它。如果你走这条路,小心采取适当的预防措施,只有你的图像文件通过。

+0

哎呀,速度太快,意味着“f passthru”,而不是“passthru”。有一个检查,以确切地说,他需要在页面上传递图像。 – Aerik

0

用户特定的URL可以通过HTTP身份验证进行保护。有examples在线,并且完全可以通过一些.htaccess小工具来调整您的现有图像的这种方法。