Date: Sat, 20 Jul 2002 21:36:10 +0400
From: Дмитрий Чертищев <apache-talk@ariadnamedia.com>
Newsgroups: apache-talk (http://www.lexa.ru/apache-talk)
Subject: Двусторонее шифрование паролей и переменные окружения в Apache
Дано: Apache с множеством виртуальных хостов и PHP4.
Исторически сложилось, что РНР скрипты должны иметь права 644, т.е.
они доступны для чтения всем, кто есть на этом сервере.
В РНР скриптах может находиться конфиденциальная информация, например,
пароли к БД.
Необходимо эти пароли спрятать, чтобы даже если скрипт похитили, то не
смогли бы узнать пароли.
Долго поломав голову, придумал следующее решение: пароли хранить в РНР
скриптах не в чистом виде, а зашифрованными, например с использованием
РНР функции двустороннего шифрования mcrypt(). А перед использование
пароля, пароль дешифровывать. Понятно, что для шифровки и дешифровки
нужно использовать один и тот же ключ, который и нужно спрятать от
посторонних глаз, иначе похитив ключ, злоумышленник сможет дешифровать
пароль.
Ключ будем хранить в переменной окружения SECRET_KEY в каждом
виртуальном хосте.
Для этого в httpd.conf для каждого виртуального хоста прописываем:
SetEnv SECRET_KEY some_unique_key
Т.е. для каждого хоста прописываем уникальный ключ.
# Полученный вектор инициализации (этот вектор не является секретной
информацией, но нужен для расшифровки)
$hex_iv = "ea09567c55fc8f6f354ba3eceba8686d4299a7b4c0c361b7c100527ab915b4b6";