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.