【问题标题】:How would you implement private images?你将如何实现私有图像?
【发布时间】:2013-06-29 15:41:38
【问题描述】:

我正在 Android 中开发一个应用程序,它以某种方式具有像 Whatsapp 一样的头像。如您所知,您可以在 WhatsApp 中创建群组,并为其设置群组图片。

我在拍摄图像、保存等方面没有任何问题。我遇到的问题是我正在 Symfony2 (PHP) 中开发 web 服务,我想接收图像并将其保存在服务器上的某个位置.但是,显然这些图像是不公开的,应该只供有权限的用户查看。我考虑过传统方法:将图像保存在文件夹中并提供链接或不提供链接,但这完全很容易破解。

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

感谢任何提示。

谢谢。

【问题讨论】:

    标签: php android image symfony


    【解决方案1】:

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

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

    还有更多详细信息: Setting Mime type in PHP

    【讨论】:

    • 我喜欢这个。例如,我会将所有图像放在一个不公开的文件夹中,只有服务器会获取该图像并通过 mime 类型返回它,对吧?
    • 图片可以在任何地方。它们不需要对 web 服务器可用,只对 PHP 应用程序可用。 PHP 应用程序负责查找图像、检查安全性并将整个图像传送回浏览器。
    • 好的。那太棒了。我会用这个。谢谢。
    【解决方案2】:

    这里的典型答案是使用排除猜测的文件命名方案。例如,您可以将文件名加上一个秘密盐,将它们散列在一起,然后将散列附加到文件名(在扩展名之前)。因此,/foo/bar/baz.jpg 将变为 /foo/bar/baz_8843d7f92416211de9ebb963ff4ce28125932878.jpg

    只要您的哈希盐仍然保密,文件名或多或少在数学上受到保护,不会被随机或暴力发现。例如,这是 Facebook 如何保护其用户图片而无需对每个图片请求都进行身份验证(根本无法很好地扩展)的核心。

    【讨论】:

    • facebook的问题是,如果你点击复制图片链接,你可以将它发送到any1,每个人都可以看到它,这不好。
    • @SergiCastellsaguéMillán 好吧,无论如何都无法修复,如果您在浏览器中看到图片 - 您可以随时保存以供以后使用。
    • @SergiCastellsaguéMillán 你永远无法解决这个问题。如果数据被发送到客户端,它可以被复制并发送给其他人。您可以通过在其前面使用身份验证脚本来提供图像来使其更难,但这意味着您不能使用 CDN 并且将花费大量 CPU 来提供图像。它无法扩展。
    猜你喜欢
    • 2012-04-27
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多