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

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

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

Спасибо.

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

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

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

Я всегда устанавливаю разрешения сертификатов и других файлов, содержащих конфиденциальные данные, так что только моя команда разработчиков и служба 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. отключить разрешение на запись в папку setfacl -m user:nginx:x /usr/share/nginx/outsidehtml/keystorage/
  5. add 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/*.*'));