К содержанию

Контрольные подписи

Содержание

6.1. Использование контрольных подписей

Для обеспечения безопасной передачи данных между Вашим сайтом и опросами Simpoll API предлагает механизм контрольных подписей.

Контрольная подпись — это MD5-хэш от строки, составленной из перечисления передаваемых параметров. Для обеспечения секретности перед хэшированием добавляется «соль» — секретный ключ, задаваемый в параметрах опроса на вкладке «API». Поскольку ключ известен только Вам и Simpoll — злоумышленник не сможет подделать подпись, даже зная алгоритм ее создания.

Для использования контрольных подписей должна быть включена соответствующая опция в параметрах опроса, на вкладке «API».

6.2. Подпись параметров передаваемых опросу

В разделе 5 был приведен пример кода, передающего параметры опросу через скрытое поле. Поскольку содержимое этого поля доступно для посетителя, он может подделать страницу изменив передаваемые параметры в этом поле. Для защиты от этого используем контрольную подпись.

Подпись представляет из себя MD5-хэш от строки, состоящий из секретного ключа и значений всех передаваемых параметров, разделенных двоеточием:

MD5 ( ключ:параметр1:параметр2 )

Значения параметров в подписи должны быть перечислены в том же порядке, в котором они пойдут в строке запроса.

После формирования подпись добавляется к общему списку как обычный параметр, с названием sig.

Пример передачи параметров опросу (с контрольной подписью):

<?php
    // Ключ контрольной подписи опроса
    // задается в параметрах опроса на вкладке "API"
    $survey_secret_key = 'q1w2e3r4';
    // Массив параметров, которые нужно будет передать
    // нашему сайту после прохождения опроса.
    // Может формироваться динамически, при необходимости.
    $params_arr = array(
        'user_id' => 123,
        'user_login' => 'anonymous'
    );
    // Формируем контрольную подпись для массива параметров
    $signature = md5( $survey_secret_key . ':' . implode(':', $params_arr) );
    // Добавляем контрольную подпись к списку параметров
    $params_arr['sig'] = $signature;
    // Формируем URL-кодированную строку запроса
    $params_str = http_build_query($params_arr);
?>
<!-- Формируем поле со строкой запроса -->
<input type="hidden" id="simpoll_params" value="<?php echo $params_str; ?>" />
<!-- Подключаем опрос -->
<script type="text/javascript" src="https://simpoll.ru/embed/framejs/aa7ca07e"></script>

Теперь, если пользователь изменит любой из параметров то подпись станет невалидной и Simpoll не покажет опрос, уведомив пользователя об ошибке.

6.3. Подпись результатов опроса

Для результатов, которые Simpoll отправляет Вашему сайту, подпись создается по другому алгоритму.

Поскольку в ответе Simpoll имеется один или несколько массивов, подпись строится из секретного ключа опроса и строки полученной после сериализации массива с ответом:

MD5 ( ключ:SERIALIZE( массив результатов ) )

Для проверки подписи на своей стороне Вы должны сформировать ее на основании полученных от Simpoll результатов и сравнить с подписью, которую передал Simpoll. Если полученные подписи не совпадают, то ответ считается невалидным и результаты должны быть отброшены.

Например, Вы получаете ответ от Simpoll через скрипт result.php методом POST —

Пример проверки подписи:

<?php
    // Ключ контрольной подписи опроса
    // задается в параметрах опроса на вкладке "API"
    $survey_secret_key = 'q1w2e3r4';
    // Получаем параметры, переданные от Simpoll через POST
    $results = $_POST;
    // Сохраняем подпись, полученную от Simpoll
    // и убираем ее из остального списка результатов
    $server_sig = $results['sig'];
    unset($results['sig']);
    // Формируем собственную контрольную подпись
    // на основании ключа и полученных от Simpoll результатов
    $signature = md5( $survey_secret_key . ':' . serialize($results) );
    // Сравниваем подписи
    if ($server_sig == $signature) {
        // ... подписи совпали, ответу можно доверять ...
    } else {
        // ... подписи не совпали, выходим ...
        exit;
    }
?>

Если в массиве $_POST (или $_GET, в зависимости от метода) могут присутствовать параметры, не связанные с Simpoll (например, добавляемые вашей CMS при каждом запросе) то они должны быть удалены из массива результатов, чтобы не повлиять на формирование подписи.

Все параметры которые передает Simpoll имеют в своем названии префикс sp_, кроме тех, которые были переданы Вами.