Прямая загрузка s3 с указанным типом контента игнорируется - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь сделать прямую загрузку s3 с php.Я хочу сделать ограничение типа контента при загрузке файлов, но s3 похоже игнорирует политику s3, но сообщение об ошибке не отображается.

здесь моя настройка политики

 return new \Aws\S3\PostObjectV4($s3_client, $bucket,
        [
            'acl' => 'public-read', 
            'key' => 'files/shop_manager/' . $merchant_id . '/${filename}',
            'success_action_redirect' => $redirect_url,
            'Content-Type' => 'text/plain',
        ],
        [
            [ 'acl'     => 'public-read' ],
            [ 'bucket'  =>  $bucket ],
            [ 'starts-with', '$key', 'files/shop_manager/' . $merchant_id],
            [ 'starts-with', '$success_action_redirect', $redirect_url],
            [ 'starts-with', '$Content-Type', 'text/'], 
            [ 'content-length-range', 1, 10485760] //10MB
        ]
    );

вотсгенерированная форма

<form id="formUpload" action="https://uboux-dev.s3.ap-southeast-1.amazonaws.com" method="POST" enctype="multipart/form-data">               
    <input type="hidden" name="acl" value="public-read" />
    <input type="hidden" name="key" value="files/shop_manager/274/${filename}" />
    <input type="hidden" name="success_action_redirect" value="https://merchants.uboux.com/management/media/?uboux_merchant_s3=7711ddf885" />
    <input type="hidden" name="Content-Type" value="text/" />
    <input type="hidden" name="X-Amz-Credential" value="AKIAI4X5PXQ5KUE5RCXA/20180524/ap-southeast-1/s3/aws4_request" />
    <input type="hidden" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" />
    <input type="hidden" name="X-Amz-Date" value="20180524T020742Z" />
    <input type="hidden" name="Policy" value="eyJleHBpcmF0aW9uIjoiMjAxOC0wNS0yNFQwMzowNzo0MloiLCJjb25kaXRpb25zIjpbeyJhY2wiOiJwdWJsaWMtcmVhZCJ9LHsiYnVja2V0IjoidWJvdXgtZGV2In0sWyJzdGFydHMtd2l0aCIsIiRrZXkiLCJmaWxlc1wvc2hvcF9tYW5hZ2VyXC8yNzQiXSxbInN0YXJ0cy13aXRoIiwiJHN1Y2Nlc3NfYWN0aW9uX3JlZGlyZWN0IiwiaHR0cHM6XC9cL21lcmNoYW50cy51Ym91eC5jb21cL21hbmFnZW1lbnRcL21lZGlhXC8/dWJvdXhfbWVyY2hhbnRfczM9NzcxMWRkZjg4NSJdLFsic3RhcnRzLXdpdGgiLCIkQ29udGVudC1UeXBlIiwidGV4dFwvIl0sWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMSwxMDQ4NTc2MF0seyJYLUFtei1EYXRlIjoiMjAxODA1MjRUMDIwNzQyWiJ9LHsiWC1BbXotQ3JlZGVudGlhbCI6IkFLSUFJNFg1UFhRNUtVRTVSQ1hBXC8yMDE4MDUyNFwvYXAtc291dGhlYXN0LTFcL3MzXC9hd3M0X3JlcXVlc3QifSx7IlgtQW16LUFsZ29yaXRobSI6IkFXUzQtSE1BQy1TSEEyNTYifV19" /><input type="hidden" name="X-Amz-Signature" value="caadf7304062acb32ef82b08988e72801b368758dc32549ff4d2bbf08134f028" />       
    <input type="file" id="fileupload" name="file" />

1 Ответ

0 голосов
/ 24 мая 2018

Ваш код работает как задумано.

Форма имеет <input type="hidden" name="Content-Type" value="text/" />, и это значение соответствует политике [ 'starts-with', '$Content-Type', 'text/'].

Проблема в том, что вы предполагаете, что эта функция что-то делаетчто он на самом деле не делает.

Эта функция не предназначена для фактического ограничения типов контента, которые могут быть загружены.Он предназначен для ограничения типа контента, который вы заявляете для загрузки, посредством значения, указанного в форме.Другими словами, пользователь (или Javascript) не может изменить поле формы на значение, которое конфликтует с политикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...