Хранение важных секретных ключей в файлах php

Мы создаем приложение с использованием PHP и некоторых сторонних сервисов, которым требуется секретный ключ API. У нас есть файл PHP, который содержит все определения ключей, которые мы затем импортируем (используя require_once) при необходимости.

Этот подход безопасен? Должны ли мы хранить ключи в другом месте?

Спасибо.

4 ответа

Решение

Нечто подобное было предложено сегодня для сценария оболочки. Ответ здесь также действителен: убедитесь, что вы храните файл вне корневого веб-каталога, или (если это невозможно) защитите его, используя .htaccess файл.

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

Это должно быть относительно безопасно, пока файл не доступен из Интернета. Многие сайты размещают конфиденциальные файлы вне веб-корня на сервере и просто включают их при необходимости в свое приложение.

Я всегда устанавливаю разрешения для сертификатов и других файлов, содержащих конфиденциальные данные, так что только моя команда разработчиков и служба apache могут получить доступ к файлу. Это важно, если вы используете сервер, общий для большой организации, например, для университета, где многие люди могут иметь разрешения на файл по умолчанию. Часто я видел разрешения на чтение, данные каждому, чтобы веб-сервер мог получить доступ к файлу (так как он не является ни владельцем, ни групповым разрешением для файла, остается только дать чтение "другому").

Вместо этого я гарантирую, что есть группа, содержащая только мою команду разработчиков, и устанавливаю права на чтение / запись для файла для этой группы. Затем я использую ACL для добавления разрешения на чтение для службы APACHE. Вы должны использовать ACL, поскольку владелец и группа обычно настроены на группу разработчиков и группу разработчиков, и у вас не останется никаких вариантов настройки доступа для apache, кроме использования ACL.

Безопасность путем запутывания:

  1. создать собственное пространство имен с функцией кодирования, декодирования
  2. добавить auto_prepend_file в php.ini в /usr/share/nginx/outsidehtml/keystorage/83738489384828838227.php
  3. запустить nginx или apache в chroot,selinux
  4. отключить разрешение на запись в папку keystorage setfacl -m user:nginx:x /usr/share/nginx/outsidehtml/keystorage/
  5. добавлять php.ini disable_class = ReflectionFunction disable_function = opcache_get_status,phpinfo,show_source,ini_get
  6. Для лучшей защиты вы можете сохранить ключ в php.ini как значение, т.е. 123key = secret64

ТЕСТОВОЕ ЗАДАНИЕ

print_r(glob('/usr/share/nginx/outsidehtml/keystorage/*.*'));
Другие вопросы по тегам