Ir para o conteúdo

Assinatura

Conteúdo

6.1. Uso de assinaturas

As assinaturas protegem os dados trocados entre o seu site e uma pesquisa.

A assinatura de controle é o hash MD5 de um texto formado pelos parâmetros transmitidos. O “sal” é a chave secreta definida na aba “API” das configurações da pesquisa; ele é adicionado antes do cálculo do hash. Como só você e o Simpoll conhecem a chave, um invasor não consegue falsificar a assinatura, mesmo conhecendo o algoritmo.

Para usar assinaturas de controle, ative a opção correspondente na aba “API” das configurações da pesquisa.

6.2. Assinar os parâmetros enviados para uma pesquisa

A seção 5 mostra como passar parâmetros para uma pesquisa em um campo oculto. Um visitante pode ver e alterar esse campo. A assinatura impede isso.

A assinatura é o hash MD5 da chave secreta e dos valores de todos os parâmetros, separados por dois-pontos:

MD5 ( key:parameter1:parameter2 )

Liste os valores na mesma ordem da string de consulta.

Depois, adicione a assinatura aos parâmetros como um parâmetro comum chamado sig.

Exemplo de como passar parâmetros com assinatura:

<?php
    // Key of the poll control signature
    // is set in poll parameters on "API" tab
    $survey_secret_key = 'q1w2e3r4';
    // Array of parameters to be sent to
    // our site once the poll is passed.
    // Can be formed dynamically, if necessary.
    $params_arr = array(
        'user_id' => 123,
        'user_login' => 'anonymous'
    );
    // Create control signature for parameter array
    $signature = md5( $survey_secret_key . ':' . implode(':', $params_arr) );
    // Add control signature to parameter list
    $params_arr['sig'] = $signature;
    // Create URL-coded inquiry line
    $params_str = http_build_query($params_arr);
?>
<!—Create field with inquiry line -->
<input type="hidden" id="simpoll_params" value="<?php echo $params_str; ?>" />
<!—Connect the poll -->
<script type="text/javascript" src="https://simpoll.com/pt/embed/framejs/aa7ca07e"></script>

Se um usuário alterar qualquer parâmetro, a assinatura deixa de bater: o Simpoll não mostra a pesquisa e informa um erro.

6.3. Assinatura dos resultados

Os resultados que o Simpoll envia para o seu site são assinados de outra forma.

Como a resposta contém arrays, a assinatura é calculada a partir da chave secreta e da resposta serializada:

MD5 ( key:SERIALIZE( result array ) )

Para verificar, calcule a assinatura a partir dos resultados recebidos e compare com a que o Simpoll enviou. Se não forem iguais, rejeite os resultados.

Por exemplo, se o seu script result.php recebe os resultados por POST:

Exemplo de verificação da assinatura:

<?php
    // Key of poll’s control signature
    // is set in parameters on "API" tab
    $survey_secret_key = 'q1w2e3r4';
    // Receive parameters sent from Simpoll through POST
    $results = $_POST;
    // Save signature received from Simpoll
    // and remove it from the list of results
    $server_sig = $results['sig'];
    unset($results['sig']);
    // Create own control signature
    // on the basis of key and results received from Simpoll
    $signature = md5( $survey_secret_key . ':' . serialize($results) );
    // Compare signatures
    if ($server_sig == $signature) {
        // ... signatures match, response is reliable ...
    } else {
        // ... signatures mismatch, exit ...
        exit;
    }
?>

Se $_POST (ou $_GET) puder conter parâmetros que não têm relação com o Simpoll (por exemplo, os que o seu CMS adiciona a toda requisição), remova-os antes de calcular a assinatura.

Todos os parâmetros enviados pelo Simpoll começam com sp_, exceto os que você mesmo passou.