База данных Rails - как хранить зашифрованные данные, используя пароль пользователя? - PullRequest
4 голосов
/ 16 октября 2010

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

Чтобы расшифровать учетные данные, потребуется пароль.

Я вижу два способа: при входе в систему я могу расшифровать учетные данные, а затем сохранить их в сеансе?Это безопасно?

ИЛИ

Сложнее будет запросить пароль еще раз перед расшифровкой сохраненных паролей / идентификаторов?

Мы не хотим иметьлюбая возможность использовать сохраненные учетные данные самостоятельно.

1 Ответ

2 голосов
/ 16 октября 2010

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

В их примере кода показано, как добавить методы класса в ActiveRecord :: Base, чтобы можно было зашифровать любой столбец базы данных в одну строку кода. Определенно идиоматический подход Rails.

Это потрясающее чтение - юнит-тесты взорвали меня, так серьезно ... иди за ним.

Кстати, когда ты сказал

Мы не хотим иметь возможность использовать сохраненные учетные данные самостоятельно.

вы понимаете, что поскольку ваш код получает незашифрованные данные из браузера пользователя, у вас есть доступ к данным в памяти до того, как они будут зашифрованы на диске, или когда они будут незашифрованными, когда пользователь захочет использовать эти данные позже. И плохие люди могут получить доступ к этим данным, если они получат root права на вашу коробку, проникнут в Ruby eval() и т. Д.

Шифрование данных очень помогает, хотя. Атаки SQL-инъекции не могут получить расшифрованные данные, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...