Надежно храните ключ аутентификации для сеансов PHP в Redis

Допустим, сайт использует Redis (удаленно) для хранения данных сеанса, и это хранилище Redis защищено ключом аутентификации.

Итак, в php.ini, используя phpredis, установлено что-то вроде:

session.save_handler = redis
session.save_path = "tcp://redis.example.com:6379?auth=[AUTH_STRING_HERE]"

Есть ли способ сделать это немного более безопасным? Любой на сервере, который затем запускает phpinfo(); можно увидеть строку авторизации...


person davidkomer    schedule 20.11.2013    source источник


Ответы (3)


Вы можете установить этот путь через php-код, используя метод ini_set. И в коде выберите значение из файла/строки, которое может хранить это как зашифрованную строку.

person Chhavi Gangwal    schedule 09.06.2014

Начиная с PHP 7, вы можете передать массив опций команде session_start(), например

session_start([
    'save_handler' => 'redis', 
    'save_path' => 'tcp://redis.example.com:6379?auth='. $your_auth
]);

Таким образом, вы можете использовать стандартные 12-факторные передовые методы хранения конфиденциальных данных в файле .env.

Для версий php до 7 вы должны иметь возможность использовать ini_set для переопределения значений, хранящихся в ваших файлах php.ini.

person Everett    schedule 31.10.2017
comment
Обратите внимание, что, несмотря на настройку save_path при запуске сеанса, путь сохранения (и пароль auth) по-прежнему будет доступен через phpinfo(), session_save_path() и ini_get() после запуска сеанса. Однако вы можете изменить путь сохранения на пустую строку после запуска сеанса, чтобы его больше нельзя было увидеть. - person Courtney Miles; 18.04.2019

отключите phpinfo, также попробуйте настроить внешний скрипт или файловую команду, которая отправляет строку авторизации (это менее безопасно и больше запутывает, но это переместит проблему дальше по линии)

person MrMesees    schedule 18.01.2015