javascript - S3.createPresignedPost() villkorsfel returnerar till användaren exakt vilket villkor som behövs för att ladda upp innehåll


När du lägger till Conditions i en uppsättning försignerade postparametrar, till exempel:

        const params: PresignedPost.Params = {
        Expires: 7200,
        Bucket: myBucket,
        Conditions: [
            ['eq', '$key', filename],
            ['content-length-range', 1, defaultUploadLimit],
        ],
    };

och använda denna försignerade URL för att sedan POSTa innehåll till min bucket, om användaren inte uppfyller villkoret vid första försöket, returnerar felmeddelandet exakt den nyckel som användaren behöver för att uppfylla villkoret:

    <?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>AccessDenied</Code>
    <Message>Invalid according to Policy: Policy Condition failed: ["eq", "$key", "myfile.txt"]</Message>
    <RequestId>yaddayadda</RequestId>
    <HostId>yaddayadda</HostId>
</Error>

Detta är ett enormt säkerhetsbrott för oss, vi kan inte ha känsliga filnamn visade vid någon punkt i våra inmatnings-/hämtningsprocesser.

Vi behöver också på något sätt validera filen som användaren laddar upp, eftersom detta inte kan göras på innehållstyp med presignerad POST ser jag ingen annan möjlighet att uppnå detta.

Vet någon om det finns ett sätt att begränsa S3-felmeddelanden? Eller ett annat sätt att validera vad användaren laddar upp med den presignerade posten som inte läcker känslig information?

Relaterade artiklar