Хранение важных секретных ключей в файлах php - PullRequest
10 голосов
/ 22 февраля 2010

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

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

Спасибо.

Ответы [ 4 ]

13 голосов
/ 22 февраля 2010

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

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

3 голосов
/ 22 февраля 2010

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

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

3 голосов
/ 22 февраля 2010

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

0 голосов
/ 23 октября 2016

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

  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

TEST

print_r(glob('/usr/share/nginx/outsidehtml/keystorage/*.*'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...