【问题标题】:AWS S3 createPresignedPost URL can upload file of any size despite limiting it尽管有限制,AWS S3 createPresignedPost URL 可以上传任何大小的文件
【发布时间】:2021-10-16 06:37:24
【问题描述】:

我正在创建一个预签名的 URL,以便前端的用户可以上传一个文件(最大 10MB)这是我创建它的方式

  const s3Params = {
        Bucket: S3_BUCKET,
        Expires: 30,
        Fields: {
            key: key,
        },
        Conditions: [
            ["eq", "$acl", "public-read"],
            ["eq", "$x-amz-meta-filename", fileName],
            ["content-length-range", 1, 10000000], //10MB
            ["eq", "$x-amz-meta-userid", userid],
        ],
    };

    console.log(s3Params);

    s3.createPresignedPost(s3Params, (err, data) => {
        if (err) {
            console.log(err);
            return cb({success: false, error: err});
        }

        data.fields["x-amz-meta-filename"] = fileName;
        data.fields["x-amz-meta-userid"] = userid;

        const returnData = {
            signedRequest: data,
            url: `https://${S3_BUCKET}.s3.amazonaws.com/${key}`,
        };
        return cb({success: true, data: {returnData}});
    });

在条件中将最大文件大小(内容长度范围)设置为 10MB,但我仍然能够使用生成的预签名 URL 上传 25MB 的文件。我在想这可能与存储桶策略有关,但我不确定。

这是我的存储桶策略

    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::blah.blah/*"
        }
    ]
}

【问题讨论】:

    标签: javascript node.js amazon-web-services amazon-s3 aws-sdk


    【解决方案1】:

    我认为您的条件只是被忽略了,因为存储桶允许匿名写入(非常糟糕的做法!)。来自docs

    如果您不提供经过身份验证的请求所需的元素,例如策略元素,则该请求假定为匿名,并且仅当您为 public 配置了存储桶时才会成功读写

    当您使用预签名的网址时,您不应公开您的存储桶。

    【讨论】:

    • 同意。您应该立即删除该存储桶策略。
    猜你喜欢
    • 2016-05-10
    • 1970-01-01
    • 2012-12-01
    • 2019-05-23
    • 2022-11-30
    • 2013-06-23
    • 1970-01-01
    • 2017-11-04
    • 2015-01-23
    相关资源
    最近更新 更多