Intereting Posts

Шифрование пользовательских данных для автоматического входа в систему сторонних производителей

Я нахожусь в ситуации, когда у меня есть набор пользователей на сайте, у которых все были сохранены имена пользователей и пароли, которые позволяют им автоматически обращаться к сторонним службам через SOAP. Идея состоит в том, что каждому пользователю нужно только войти на главный сайт, чтобы получить доступ к нескольким услугам, используя их соответствующую сохраненную информацию пользователя для каждой службы. Я чувствую, что такие данные должны быть зашифрованы в моей базе данных при их сохранении и затем автоматически дешифрованы, когда они передаются функции php / SOAP, когда пользователю необходимо получить доступ к данной службе. Какой был бы лучший способ сделать это?

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

Спасибо заранее

Вы столкнулись с самой большой проблемой шифрования данных в базе данных:

➽ Где хранить ключ?

Шифрование не может решить проблему защиты данных, оно может «сконцентрироваться» только на ключе. Где бы вы ни хранили ключ, ваше приложение должно иметь возможность расшифровать данные, поэтому может сделать атакующего. Есть два возможных решения этой проблемы, о которых я знаю:

  1. Поместите ключ в место как можно безопаснее. Это означает, что он должен быть размещен вне каталога www-root в недоступном каталоге на сервере. В зависимости от важности данных вы также можете рассмотреть вопрос об аутсорсинге шифрования на другой выделенный сервер.
  2. Не храните ключ и не извлекайте его из пароля пользователя. Это единственный действительно безопасный способ, потому что даже сервер не может расшифровать данные. Конечно, минусы, что пользователь должен вводить пароль каждый раз, когда он пользуется вашим сервисом. Если пользователь меняет пароль, вам необходимо повторно зашифровать все данные. Если пользователь забывает пароль, данные теряются.

PS Я бы рекомендовал зашифровать данные перед их хранением в базе данных, потому что MySQL AES_ENCRYPT использует режим ECB без IV. Это позволяет искать определенное значение, но менее безопасно (я уверен, что вы не хотите искать по паролю).