Image 用于保护交付给经过身份验证的用户的嵌入式图像的方法?

Image 用于保护交付给经过身份验证的用户的嵌入式图像的方法?,image,security,authentication,Image,Security,Authentication,作为应用程序的一部分,我的用户可以创建带有嵌入图像/文件/文本等的文档。查看和编辑此内容需要用户登录。目前,图像和文件作为永久链接提供,因此如果共享这些链接,任何未经身份验证的用户都可以永久访问它们 我想确保这些文件的安全。我最初的想法是使用登录令牌和用户id来检查他们是否有访问权,并且只有在他们有访问权的情况下才能交付文件。但后来我开始研究它,似乎最实际的解决方案是生成一个链接,该链接将在将来某个时候过期。这并不能消除未经身份验证的访问的风险,但可能足以降低风险 我想到的问题是: 关于如何实

作为应用程序的一部分,我的用户可以创建带有嵌入图像/文件/文本等的文档。查看和编辑此内容需要用户登录。目前,图像和文件作为永久链接提供,因此如果共享这些链接,任何未经身份验证的用户都可以永久访问它们

我想确保这些文件的安全。我最初的想法是使用登录令牌和用户id来检查他们是否有访问权,并且只有在他们有访问权的情况下才能交付文件。但后来我开始研究它,似乎最实际的解决方案是生成一个链接,该链接将在将来某个时候过期。这并不能消除未经身份验证的访问的风险,但可能足以降低风险

我想到的问题是:

  • 关于如何实施这一点,是否有共同的方法或几种选择

    • 我看到返回的URL使用了过期期限
    • 谷歌文档似乎为它的嵌入式图像做了一些更复杂的事情,但我不知道是什么
    • 其他人
  • 基本设计要点

  • 各有利弊

是的,它将经过身份验证的访问减少到固定时间,但理论上它提供未经身份验证的访问。因此,安全专家会声称它没有身份验证。这种定时过期链接通常用于防止一次性未经身份验证的访问,如密码重置(以及独立于时间的过期令牌)

你的目标是什么?您试图从谁那里保护数据?您是否希望限制已访问文件的用户提供过期时间?从这个问题来看,您需要确保每个人都能访问包含文本和嵌入图像的文件/文档。关于定时到期设计,您是对的。它不会保证您的身份验证和文档的完整性,如果它是通过不安全的HTTP,它甚至不会向您提供来自潜在对手的文档的完整性

您可以通过HTTPS使用cookie(安全cookie)。只要用户拥有未过期的cookie,就允许访问文件/文档。如果要将解决方案放在前面有反向代理的多个盒子中,cookie方法需要分布式cookie管理。尽管跨站点脚本编写是一种威胁,但大多数主要的web应用程序提供商仍在使用基于cookie的解决方案。请注意,cookie破坏了web应用程序的性质

另一种方法(类似于cookie)是生成绑定到用户/文档的经过身份验证的令牌,该用户/文档在生成令牌时可以在设置的时间段内访问N次尝试。必须通过HTTPS使用此方法,以避免不需要的侦听器

经常变化的链接管理成本非常高,并且随着时间的推移不可扩展,因为它有太多的状态需要管理,而应用程序崩溃使其成本更高。重新定向到身份验证对于您来说是一种安全的选择,前提是您已经有了cookie管理,或者您有一个应用程序实例需要处理


或者,如果您的框架支持它,您也可以这样做,这样您就不必担心cookie地狱了。请注意,您可能需要根据您的用例编写一些客户端java脚本。

您最初的方法是正确的。您使用的是什么web应用程序框架?我使用的是Meteor及其相应的accounts软件包,这使得服务器端的身份验证更加复杂,但我已经找到了足够的信息,我认为我可以解决这个问题。我听说过生成指向文件的过期链接/URL,但不确定A)这是否适用于嵌入式图像,B)是否有更好的方法来处理这一问题,一般来说,谷歌用于处理身份验证的第三方用户。对Google Drive/Docs的所有请求都使用随请求发送的令牌进行身份验证。我不知道它们的实现或任何更详细的信息。除此之外,您可以将文件上载到Amazon S3,因为它是物理文件,并限制应用程序对文件的访问。碰巧我已经在这样做了,尽管是间接地使用filepicker.io。。。Filepicker包括我也使用的相同HMAC签名选项。我最大的问题是如何解决这个问题。正如我所读到的,发送一次性nonce似乎可以很好地避免重播攻击的风险,但这当然会增加整个系统的开销。我认为签署文件并有一个小的过期时间是合适的解决方案。