Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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 您将如何实现私有映像?_Php_Android_Image_Symfony - Fatal编程技术网

Php 您将如何实现私有映像?

Php 您将如何实现私有映像?,php,android,image,symfony,Php,Android,Image,Symfony,我正在用Android开发一个应用程序,它有一些像Whatsapp那样的化身。正如您所知,在WhatsApp中,您可以创建一个组,并为其设置一个组图片 我在拍摄图像、保存等方面没有任何问题。我的问题是,我正在用Symfony2 PHP开发Web服务,我希望接收图像并将其保存在服务器上的某个位置。但是,很明显,这些图像不是公开的,应该只为具有权限的用户查看。我曾考虑过传统的方法:将图像保存在文件夹中,并给出链接或不给出链接,但这很容易破解 伙计们,你们会怎么做?也许直接将二进制数据保存到MySql

我正在用Android开发一个应用程序,它有一些像Whatsapp那样的化身。正如您所知,在WhatsApp中,您可以创建一个组,并为其设置一个组图片

我在拍摄图像、保存等方面没有任何问题。我的问题是,我正在用Symfony2 PHP开发Web服务,我希望接收图像并将其保存在服务器上的某个位置。但是,很明显,这些图像不是公开的,应该只为具有权限的用户查看。我曾考虑过传统的方法:将图像保存在文件夹中,并给出链接或不给出链接,但这很容易破解

伙计们,你们会怎么做?也许直接将二进制数据保存到MySql中?有没有干净的方法来实现这一点

任何提示都将不胜感激


谢谢。

这里的典型答案是使用避免猜测的文件命名方案。例如,您可以将文件名加上一个秘密salt,将它们散列在一起,并在扩展名之前将散列附加到文件名。因此,/foo/bar/baz.jpg将变成/foo/bar/baz_8843d7f92416211de9ebb963ff4ce2825932878.jpg


只要hash salt仍然是秘密的,文件名就或多或少地受到数学保护,不会被随机或暴力发现。例如,这就是Facebook如何保护其用户图片的核心,而不必为每个无法很好扩展的图像请求实际要求身份验证。

另一个答案是将PHP调用的mime类型设置为图像。对URL的调用,如http://xxx/images.php?id=8989031289130 然后将返回图像而不是HTML文件

然后,您可以访问PHP安全上下文,并可以验证用户是否确实拥有查看此文件的权限

有关更多详细信息,请访问:

facebook的问题是,如果你按“复制图像链接”,你可以将它发送到任何人,每个人都可以看到它,这是不好的。@SergiCastellsaguéMillán如果你在浏览器中看到图片,这是无法修复的,你可以随时保存它以备以后使用。@SergiCastellsaguéMillán你永远无法修复这个问题。如果数据被发送到客户机,它可以被复制并发送给其他人。通过在图像前面提供身份验证脚本,您可以使其变得更加困难,但这将意味着您不能使用CDN,并且将花费大量CPU来提供图像。它不能缩放,我喜欢这个。例如,我会将所有图像放在一个不公开的文件夹中,只有服务器才能获取图像并通过mime类型返回,对吗?图像可以在任何地方。它们不需要对Web服务器可用,只需要对PHP应用程序可用。PHP应用程序负责查找图像、检查安全性并将整个图像返回到browser.Ok。太好了。我会用这个。谢谢