gpt4 book ai didi

rest - 从 API 网关通过 REST api 上传文件的最佳方法

转载 作者:行者123 更新时间:2023-12-04 15:29:32 24 4
gpt4 key购买 nike

用户案例:客户可以将文件从公共(public) REST api 上传到我们的 S3 存储桶,然后我们可以使用下游服务处理文件。
在做了一些研究之后,我能够找到 3 种方法来做到这一点:

  • 使用 OCTET-STREAM 文件类型上传
  • 使用表单数据请求上传文件
  • 使用预签名 URL
  • 上传文件

    在前两种情况下,用户将发送二进制文件,我们将在文件验证后将文件上传到 S3。
    在第 3 种方法中,用户必须点击 3 个 api。第一个获取 S3 预签名 URL 的 API,该 URL 将允许用户将文件上传到 S3。在第二次点击时,用户会将文件上传到该 s3 预签名 URL。用户完成上传后,他将发送处理文件的请求。

    Do we have any security issues with step 3? As user can misuse the pre-signed URL with malicious file.

    Which of these method is best according to industry practice?



    每种方法的详细信息:
    1. 使用 OCTET-STREAM 文件类型上传
    优点:
  • 此方法适用于上传可以在某些应用程序(例如 xlsx)中打开的文件类型。
  • 1 个 API 命中。直接文件上传

  • 缺点:
  • 此选项不适合上传多个文件。如果将来我们需要支持多文件上传,则应将其更改为 multipart/form-data (A2)。
  • 任何元数据都不能作为正文参数发送。元数据可以在 header 中发送。

  • 2.使用表单数据请求上传文件
    用户将通过将文件附加为多部分表单来上传带有 API 请求的文件。
    优点
  • 我们可以同时发送多个文件。
  • 我们可以在正文中发送额外的参数。

  • 3. 使用预签名 URL 上传文件
    缺点
  • 客户必须点击 3 个 API 才能上传文件。 (上传 2 个 API 命中,然后再通过 1 个 API 命中检查文件的进程)
  • 最佳答案

    如果您希望他们将数据加载到存储桶中,最好的方法几乎总是使用预先签名的 URL。这使您可以完全控制如何分配对存储桶的访问权限,但还允许他们在有权访问时直接上传到存储桶中。
    在前两个示例中,用户可以将恶意数据发送到您的 API,这可能会给服务器添加 DOS/管理有效负载的费用,因为您无法控制访问(它是公开的)。
    在第三种情况下,他们可以向您请求 URL,但就是这样,除了向您发送垃圾邮件请求 URL 之外,除非您授予他们一个 URL,否则他们无法访问存储桶或执行任何其他操作。这似乎比使用大型垃圾文件发送垃圾邮件并让您在决定不想要它们之前处理它们要好得多。
    最后,使用预签名 URL 是 AWS 希望您使用的模式,因此为管理访问、角色、日志记录和监控等提供了很多支持,您希望围绕此服务放置这些内容。当您自己建立 API 时,这一切都由您来管理。

    关于rest - 从 API 网关通过 REST api 上传文件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61496449/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com