Продемонстрированная "дыра" в безопасности показывает, насколько легко можно допустить ошибку при проектировании Web-приложения. Подобного рода ошибки совершить очень легко. Приемы, описанные в данной главе, не оберегут ото всех возможных ошибок. Поэтому необходимо проводить регулярное резервное копирование файлов сервера и дампов баз данных. Лучше, если это будет выполнять не человек, а автоматическая система.
. Функции, с помощью которых реализуется однонаправленное шифрование, называются функциями хеширования. При использовании таких функций создается уникальный "отпечаток" строки. Наиболее часто в качестве алгоритма хеширования применяется алгоритм MD5, реализовать который можно с помощью одноименной функции:
string md5(string str[, bool raw_output])
В качестве обязательного аргумента эта функция принимает строку str, которую необходимо зашифровать, и возвращает ее уникальный 128-битовый отпечаток (хеш-код). Если необязательный аргумент raw__output имеет значение true, то возвращается бинарная строка из 16 символов. Вероятность того, что две строки дадут одинаковый хеш-код, стремится к нулю.
Аналогичная функция md5_file () часто используется для создания уникального хеш-кода объемных файлов, которые передаются по сети. Загрузив файлы, всегда можно проверить целостность хеш-кода, вычислив его по алгоритму MD5 и сравнив полученный результат с хеш-кодом, предоставляемым распространителем. Это позволяет отследить повреждения файла, вызванные передачей через сеть, а так же предотвращает фальсификацию файла. Такой способ часто применяют при распространении объемных дистрибутивов.
При помощи этой функции можно зашифровывать различные данные, к примеру, пароли пользователей. Это предоставляет возможность организовать следующий алгоритм авторизации пользователей. При первой регистрации пользователя сохраняется хеш-код его пароля (к примеру, в базе данных). При дальнейших посещениях странички хеш-код вводимого пользователем пароля сравнивается с сохраненным ранее хеш-кодом. Если эти отпечатки совпадают, авторизация считается успешной.