Где следует хранить ключи безопасности для attr_encrypted?
Я смотрел на attr_encrypted, но он хранит ключи в коде, который не кажется таким безопасным. Если мой веб-сервер будет взломан, шифрование не сильно поможет.
Какие есть варианты защиты данных, если мой веб-сервер будет взломан?
2 ответа
Ключи должны быть в памяти, чтобы выполнить шифрование и дешифрование. Если ваш сервер взломан, вы не можете использовать ваши ключи; как только злоумышленник получит доступ к вашей локальной машине, все ставки будут отменены. Если ваше приложение может расшифровать данные, оно также сможет, в зависимости от того, сколько усилий они готовы потратить на извлечение этих ключей.
attr_encrypted защитит вас от таких вещей, как SQL-инъекции, которые могут привести к утечке конфиденциальных данных, но если ваше приложение скомпрометировано, то ваш злоумышленник может получить доступ ко всему, что может получить ваше приложение.
Чтобы сделать это сложнее, вы можете использовать ключи, зашифрованные паролем. Вы можете сохранить зашифрованный ключ на диске, а затем, когда вы развернете свое приложение (или иным образом запустите его), вы предоставите свой пароль для расшифровки ключа в памяти, а затем выбросите пароль. Это по-прежнему не может защитить вас от того, что кто-то просматривает память вашего процесса, и это означает, что вам нужно взаимодействовать с человеком каждый раз, когда ваше приложение должно запускаться (что может быть проблемой при автоматическом мониторинге), но это значительно увеличит сложность (но не предотвращение) извлечения ключей шифрования из скомпрометированной машины.
Я использую переменные среды для установки ключей. Легко иметь разные подходы для разработки или производства.
Проблема шифрования:
# app/models/concerns/encryption.rb
module Encryption
extend ActiveSupport::Concern
module ClassMethods
def encryption_key
ENV['ENCRYPT_KEY']
end
end
end
В модели используйте метод концерна.
class User < ActiveRecord::Base
include Encryption
attr_encrypted :name, :key => encryption_key
end
В разработке используйте .env
файл для хранения ключей и получения переменных среды с помощью мастера. Heroku предоставляет простой способ установки переменных окружения с панели инструментов.