6.1. Signaturen verwenden
Signaturen schützen die Daten, die Ihre Website und eine Umfrage austauschen.
Die Kontrollsignatur ist der MD5-Hash einer Zeichenkette aus den übertragenen Parametern. Das „Salz“ ist der geheime Schlüssel aus den Umfrageeinstellungen im Reiter „API“; er wird vor dem Hashen hinzugefügt. Da nur Sie und Simpoll den Schlüssel kennen, kann ein Angreifer die Signatur nicht fälschen, selbst wenn er das Verfahren kennt.
Um Kontrollsignaturen zu verwenden, schalten Sie die entsprechende Option im Reiter „API“ der Umfrageeinstellungen ein.
6.2. An eine Umfrage gesendete Parameter signieren
Abschnitt 5 zeigt, wie man Parameter in einem versteckten Feld an eine Umfrage übergibt. Ein Besucher kann dieses Feld sehen und ändern. Eine Signatur verhindert das.
Die Signatur ist der MD5-Hash aus dem geheimen Schlüssel und den Werten aller Parameter, getrennt durch Doppelpunkte:
MD5 ( key:parameter1:parameter2 )
Führen Sie die Werte in derselben Reihenfolge auf wie in der Abfragezeichenkette.
Fügen Sie die Signatur dann als gewöhnlichen Parameter mit dem Namen sig zu den Parametern hinzu.
Beispiel für die Übergabe von Parametern mit Signatur:
<?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/de/embed/framejs/aa7ca07e"></script>
Ändert ein Benutzer einen Parameter, passt die Signatur nicht mehr: Simpoll zeigt die Umfrage nicht an und meldet einen Fehler.
6.3. Signatur der Ergebnisse
Ergebnisse, die Simpoll an Ihre Website sendet, werden anders signiert.
Da die Antwort Arrays enthält, wird die Signatur aus dem geheimen Schlüssel und der serialisierten Antwort gebildet:
MD5 ( key:SERIALIZE( result array ) )
Zur Prüfung bilden Sie die Signatur aus den erhaltenen Ergebnissen und vergleichen sie mit der von Simpoll gesendeten. Stimmen sie nicht überein, verwerfen Sie die Ergebnisse.
Zum Beispiel, wenn Ihr Skript result.php die Ergebnisse per POST empfängt:
Beispiel für die Prüfung der Signatur:
<?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;
}
?>
Kann $_POST (oder $_GET) Parameter enthalten, die nichts mit Simpoll zu tun haben (zum Beispiel solche, die Ihr CMS jeder Anfrage hinzufügt), entfernen Sie sie vor dem Bilden der Signatur.
Alle von Simpoll gesendeten Parameter beginnen mit sp_, außer denen, die Sie selbst übergeben haben.