Intereting Posts
Скопировать данные, созданные javascript на стороне сервера, из webpages.aspx Рекурсивная функция возвращает значение null MySQLi: как вставить в несколько таблиц с подготовленными операторами Обработка Javascript потока октетов php readfile Есть ли простой способ обнаружить пересечения сегментов линии? CakePHP-2.0: Как я могу отправить электронную почту из учетной записи gmail, используя настройки CakEmail и SMTP? php regex: найти встроенный javascript в документе HTML PHP-текстовая проблема как показать / скрыть divs, когда divs создаются динамически Как запустить и остановить сервер PHP dev с помощью exec () file_exists () не работает codeigniter как проверить, сколько видеопотока было просмотрено пользователем с помощью php Создание WSDL при использовании собственного класса SOAP PHP? установить cookie в диалоговом окне jquery и показать выбранное значение на странице после отправки с почтовым индексом PHP получатель формы отправки электронной почты не получает правильный адрес электронной почты sendr

Где я должен хранить ключ шифрования для php?

Я пишу php-приложение, которое принимает конфиденциальные данные клиента, поэтому мне нужно зашифровать его, прежде чем хранить его в базе данных mysql. Я собираюсь использовать встроенную функциональность AES для mysql для шифрования на уровне столбца.

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

Каков наилучший способ сделать это?

Могу ли я изменить массив $ _SERVER для хранения информации между запросами? Можно ли каким-то образом сохранить ключ с apache? Может быть, общая память?

Вместо того, чтобы полагаться на MySQL AES для шифрования, почему бы не использовать собственную схему шифрования opensl PHP (расширение PECL). Для этого требуется закрытый и открытый ключ, общедоступный для шифрования, закрытый для расшифровки и ключи могут храниться в разных местах.

Я закончил тем, что сохранил ключ шифрования в таблице в памяти. Весь доступ к базе данных осуществляется через набор хранимых процедур; Хранимые процедуры включают в себя возможность управления ключами (например, вставить ключ в таблицу памяти, изменить ключи, проверить, был ли введен ключ и т. Д.), А также сохранять / извлекать данные приложения.

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

Мне понравился этот подход, потому что:

  1. Ключ не сохраняется в файловой системе – предотвращение проблем с удалением оборудования в конце срока службы и от посторонних глаз системных администраторов
  2. Код приложения не может получить доступ к ключу (кроме ввода его), поэтому единственное место, где он когда-либо будет находиться, находится в процессе создания базы данных.
  3. Вся логика для шифрования / дешифрования встроена в SQL-запросы, поэтому не нужно беспокоиться о том, что код приложения делает это правильно – приятно для обслуживания.

Одна из возможностей – создать RAM-диск . И сохраните ключ там.

Самое безопасное место для хранения любого ключа шифрования находится на сервере NOT в базе данных и убедитесь, что он принадлежит root и не читается другими.