我正在研究不同的技术来为多平台应用程序创建API。此应用程序必须允许用户与朋友共享文件而无需身份验证,但URL必须是不可访问的,因此文件保密。 Juste喜欢在谷歌照片中分享图片功能。
Spring boot是创建多平台API的最有趣的框架之一,但我想知道是否可以创建一个秘密且不可思议的URL。
感谢您的时间。
答案 0 :(得分:1)
要回答您的问题:您可以使用一些随机的难以猜测的部分来组织您的网址路径(例如https://hostname/fileshare/Zak/myVideos/295223cb464d4e4794b93a09a1c730fd
)UUID是128位数据并且非常标准。
另一种方法是在queryString中添加校验和标记:
https://hostname/fileshare/Zak/myVideos/lolcat.mp4?h=187515ZED
使用某种安全算法(例如)从url路径(甚至可能是queryString)生成令牌并使用Controller
(或更好,{{1} }}检查h参数是否确实等于散列路径。
编辑:进一步解释:
我假设你已经(或者至少打算拥有)一个能够根据文件系统目录提供内容的控制器。在我之前的例子中,我假设了一些像Filter
这样的东西。 Spring控制器可以通过文件名轻松返回此目录中的文件,但如果文件名很容易猜到(例如/Zak/myVideos/
),我知道/Zak/myVideos/video1.mp4很容易受到攻击。这就是我建议使用UUID的原因。
如何使用UUIDS?
如果您可以重命名/ Zak / myVideos中的文件,只需通过随机UUID重命名它们就可以透明地工作。对此的支持是1)文件名不再具有任何意义,2)您可能无法重命名这些文件。
您还可以使用引用文件名和UUID的数据库表,只需让控制器调用服务即可从正确的UUID中检索正确的文件名。对此的支持是你需要有一个数据库并编写一些代码(并减慢API调用以查询数据库)。
这也是我建议只使用令牌的原因。 url仍然是文件的litteral路径,但在queryString中需要一个额外的参数(令牌)。在授予对提供文件的控制器的访问权限之前,servletRequestFilter可以检查令牌是否有效(使用简单的哈希+检查算法)。这样,您就不需要重命名文件,也不需要创建数据库。