我有一个用angularjs和dropwizard后端编写的应用程序。所有API调用都是ajax,文件下载除外,这是通过执行重定向到标准GET请求来完成的。 所有API调用都通过令牌进行保护,该令牌作为令牌头传递。我们对所有API使用SSL。 下载GET请求有效,但我很难搞清楚如何保护它。我无法设置自定义标头,这是传递令牌所必需的。所以从理论上讲,我留下了两个选项,显然没有一个可以接受:1。将令牌作为GET参数传递一个2.让下载不安全。 任何想法如何保护文件下载?
答案 0 :(得分:1)
在URL查询参数中放置一个秘密令牌并不是很好,因为URL往往是漏洞,例如通过history / logging / referrers。有一些方法可以缓解这种情况:例如,您可以让服务器端发出一个仅适用于一次使用或有限时间的下载令牌。或者客户端可以通过服务器端可以验证的秘密令牌传递使用签名创建的限时令牌。
或者你也可以,只为这一个界面(例如路径限制,quitckly-expiring)将令牌放入cookie中。
另一种方法是通过AJAX下载整个文件,从而允许您将标头设置为正常。然后,您必须将内容呈现为可下载的本地资源,这需要一组特定于浏览器的黑客(例如,使用数据:或文件系统:URL,以及可能与download
属性的链接)。鉴于复杂性,这通常不值得打扰,特别是如果文件非常大,可能会产生进一步的存储限制。