Задача выглядит так: повысить степень защищенности передаваемых на сервер данных, причем сама защита должна осуществляться в браузере клиента. А это означает, что прослушивание каналов связи, атаки на HTTPS-соединение и прочие SQL-инъекции Вам будут нестрашны даже при передаче данных по незащищенным протоколам.
Для подобных задач был разработан симметричный Hash-Mask алгоритм. Его отличительные особенности: простота при высокой криптозащищённости, и возможность реализации защиты средствами JavaScript прямо в браузере клиента. Код получается простым и открытым, что позволяет осуществлять полный пользовательский контроль над шифрованием/дешифрованием данных. Сам процесс шифрования происходит в off-line режиме, что дополнительно увеличивает защиту.
Реализуется этот механизм очень просто: на клиентской части — путем подключения трёх дополнительных скриптов, а на серверной — дополнительнго модуля (разработан пока для Perl). Фактически, все эти модули и скрипты являются надстройками над уже работающей схемой.
- На клиенте имеются: стандартная форма с двумя полями.
- Подключаются: фреймвок jQuery, скрипт MD5, кодирующий скрипт
После заполнения полей и нажатия на кнопку «Отправить» происходит следующее: скрипт предлагает ввести кодовое слово и запоминает его (при следующих запросах его вводить не нужно); извлекает данные из всех полей формы и кодирует их; сами поля — обнуляет; создаёт новое поле с именем «Q» и со значением равным кодированной строке; передает на сервер это это поле.
На сервере, декодирующий модуль расшифровывает данные поля «Q» и добавляет их в стандартные поля модуля CGI, с которыми уже можно работать, как обычно. Подлючается этот модуль так:
#!/usr/local/bin/perl
use Secure;
Данные берём из переменной $Q. Например, так мы получаем значения поля «name»: $Q->param("name"). Саму переменную $Q создавать не нужно: её создаёт модуль.
Попробуйте заполнить поля, затем будет предложено ввести кодовое слово — введите Masha и получите данные на обработанной сервером странице. Обратите внимание на строку запроса передаваемую на сервер.