Proteção da integridade de dados com somas de verificação - AWS SDK para PHP

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Proteção da integridade de dados com somas de verificação

O Amazon Simple Storage Service (Amazon S3) oferece a capacidade de especificar uma soma de verificação ao fazer upload de um objeto. Quando você especifica uma soma de verificação, ela é armazenada com o objeto e pode ser validada quando o objeto é baixado.

As somas de verificação fornecem uma camada adicional de integridade de dados quando você transfere arquivos. Com somas de verificação, você pode verificar a consistência de dados confirmando que o arquivo recebido corresponde ao arquivo original. Consulte mais informações sobre as somas de verificação no Amazon S3 no Guia do usuário do Amazon Simple Storage Service, incluindo os algoritmos compatíveis.

Você tem a flexibilidade de escolher o algoritmo mais adequado às suas necessidades e deixar que o SDK calcule a soma de verificação. Como alternativa, você pode fornecer um valor de soma de verificação pré-calculado usando um dos algoritmos compatíveis.

nota

A partir da versão 3.337.0 do AWS SDK para PHP, o SDK fornece proteção de integridade padrão ao calcular automaticamente uma soma de verificação para uploads. CRC32 O SDK calcula essa soma de verificação se você não fornecer um valor de soma de verificação pré-calculado ou se não especificar um algoritmo que o SDK deva usar para calcular uma soma de verificação.

O SDK também fornece configurações globais para proteções de integridade de dados que você pode definir externamente, sobre as quais você pode ler no Guia de referência de ferramentas AWS SDKs e ferramentas.

Importante

Para trabalhar com o CRC32C algoritmo, seu ambiente PHP requer a instalação da extensão AWS Common Runtime (AWS CRT).

Discutimos somas de verificação em duas fases de solicitação: upload de um objeto e download de um objeto.

Fazer upload de um objeto

Você carrega objetos no Amazon S3 usando o método putObject do S3Client. Use o par ChecksumAlgorithm na matriz de parâmetros para habilitar o cálculo da soma de verificação e especificar o algoritmo.

$client = new \Aws\S3\S3Client(['region' => 'us-east-2']); // See the note below. $result = $client->putObject([ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'key', 'ChecksumAlgorithm' => 'CRC32', 'Body' => 'Object contents to test the checksum.' ]);

Se você não fornecer um algoritmo de soma de verificação com a solicitação, o comportamento da soma de verificação variará com a versão do SDK usada, conforme mostrado na tabela a seguir.

Comportamento da soma de verificação quando nenhum algoritmo de soma de verificação é fornecido

Versão do SDK do PHP Comportamento da soma de verificação
anterior à versão 3.337.0 O SDK não calcula automaticamente uma soma de verificação baseada em CRC nem a inclui na solicitação.
3.337.0 ou posterior

O SDK usa o algoritmo CRC32 para calcular a soma de verificação e a fornece na solicitação. O Amazon S3 valida a integridade da transferência calculando sua própria soma de verificação CRC32 e a compara com a soma de verificação fornecida pelo SDK. Se elas corresponderem, a soma de verificação será salva com o objeto.

Usar um valor de soma de verificação pré-calculado

Um valor de soma de verificação pré-calculado fornecido com a solicitação desabilita a computação automática pelo SDK e, em vez disso, usa o valor fornecido.

O exemplo a seguir mostra uma solicitação com uma soma de SHA256 verificação pré-calculada.

use Aws\S3\S3Client; use GuzzleHttp\Psr7; $client = new S3Client([ 'region' => 'us-east-1', ]); // Calculate the SHA256 checksum of the contents to be uploaded. $contents = 'Object contents to test the checksum.'; $body = Psr7\Utils::streamFor($contents); $sha256 = base64_encode(Psr7\Utils::hash($body, 'sha256', true)); $result = $client->putObject([ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'key', 'Body' => $body, 'ChecksumSHA256' => $sha256 ]);

Se o Amazon S3 determinar que o valor da soma de verificação está incorreto para o algoritmo especificado, o serviço retornará uma resposta de erro.

Carregamentos fracionados

Você também pode usar somas de verificação com carregamentos fracionados.

Conforme mostrado no exemplo a seguir, especifique o algoritmo de soma de verificação como um par de chave-valor na matriz params do construtor MultipartUploader.

$s3Client = new S3Client([ 'region' => 'us-east-1' ]); $stream = fopen("/path/to/large/file", "r"); $mpUploader = new MultipartUploader($s3Client, $stream, [ 'bucket' => 'amzn-s3-demo-bucket', 'key' => 'key', 'params' => ['ChecksumAlgorithm' => 'CRC32'] ]);

Fazer download de um objeto

Quando você usa o método getObject para baixar um objeto, o SDK valida automaticamente a soma de verificação quando o valor da chave ChecksumMode é definido como enabled.

A solicitação no trecho a seguir direciona o SDK a validar a soma de verificação na resposta calculando a soma de verificação e comparando os valores.

$result = $client->getObject([ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'test-checksum-key', 'ChecksumMode' => 'enabled', ]);
nota

Se o objeto não tiver sido carregado com uma soma de verificação, nenhuma validação ocorrerá.