PHP 5 » Blog Archive » Защита скрытых элементов

Защита скрытых элементов

Средством для проверки данных в рассматриваемом случае является алгоритм MD5. Этот алгоритм используется для создания дайджеста сообщения (вид цифровой подписи) из переданных ему данных. Как и подпись человека, цифровая подпись, создаваемая алгоритмом MD5, уникальна для строки. Несмотря на то что существует небольшая вероятность (1 из 3.40282е+38) того, что цифровые подписи двух строк совпадут, для практического использования можно считать, что оprotect,Tabini,validateprotect,Tabini,validateprotect,Tabini,validateни уникальны.
Цифровые подписи, создаваемые алгоритмом MD5, не только уникальны, но и предопределены. Для заданной строки алгоритм MD5 всегда создает одну и ту же цифровую подпись. В РНР использование алгоритма MD5 сводится к вызову функции md5 О , имеющей синтаксис:
md5(Sstring)
где Sstring — строка, для которой нужно сгенерировать цифровую подпись. Функция rod5() возвращает 32-символьную подпись, основанную на данных, переданных в Sstring, Каким же образом функция md5 () помогает убедиться в том, что данные остаются неизменными в промежутке времени между созданием формы и ее передачей? Создав МП5-подписи для каждого скрытого элемента в документе и проверив эти подписи во время передачи формы, можно быть уверенным, что передаваемые данные достоверны.
При создании подписей MD5 важно помнить, что главное преимущество алгоритма одновременно является его недостатком. Поскольку алгоритм MD5 полностью предсказуем, простое использование некоторых комбинаций передаваемых параметров Sname и Svalue может оказаться потенциально небезопасным. Например, рассмотрим следующий фрагмент:
Sfingerprint = md5(Sname.Svalue);
Несмотря на то что Sfingerprint является цифровой подписью MD5, основанной на переданных параметрах, злоумышленник (достаточно внимательный) может с относительной легкостью определит!, строку, использованную для генерации цифровой подписи. Для того чтобы подпись MD5 была действительно безопасной, нужно использовать значение, полностью не известное внешнему пользователю:
Sfingerprint = md5(Sname.Svalue.’mysecretword’);
При использовании этого метода злоумышленник должен не только разобраться в том, как была создана строка для алгоритма MD5, но и должен знать дополнительное значение. Для простоты, с помощью PHP-оператора define, определим константу PRQTE С ТЕ D_ КЕ Y для хранения секретного слова:
define(”PROTECTED_KEY”, “mysecretword”);
НА ЗАМЕТКУ -
Когда константа определяется с использованием оператора define, она выглядит как обычная PHP-константа. Это значит, что на нее можно ссылаться как PROTECTED_KEY (без начального символа S) и она автоматически доступна в любой точке сценария, независимо от области видимости.

Tags: , ,

Related posts


Leave a Reply