Мне нужно сохранить небольшую часть данных (менее 10 символов) в файле cookie в Rails, и мне нужно, чтобы это было безопасно. Я не хочу, чтобы кто-нибудь мог читать эту часть данных или вводить свои собственные данные (так как это откроет приложение для многих видов атак). Я думаю, что шифрование содержимого файла cookie - это способ пойти (должен ли я также его подписать?). Каков наилучший способ сделать это?Хранение зашифрованного файла cookie с Rails
Прямо сейчас я делаю это, что выглядит безопасным, но многие вещи выглядят безопасными для людей, которые знали гораздо больше, чем я о безопасности, и тогда было обнаружено, что он не был действительно безопасным.
Я спасаю секрет так:
encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token)
cookies[:secret] = {
:value => encryptor.encrypt(secret),
:domain => "example.com",
:secure => !(Rails.env.test? || Rails.env.development?)
}
, а затем я читаю это так:
encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token)
secret = encryptor.decrypt(cookies[:secret])
Это безопасно? Какие-нибудь лучшие способы сделать это?
Обновление: Я знаю о сеансе Rails и о том, как он безопасен, как путем подписания файла cookie, так и при необходимости хранения содержимого сервера сеанса, и я использую сеанс для чего он предназначен. Но мой вопрос здесь заключается в том, чтобы хранить куки-файл, часть информации, которую я не хочу в сеансе, но мне все еще нужно, чтобы она была безопасной.
Из интереса, почему его нужно хранить в cookie, а не на стороне сервера, где он будет по определению более безопасным? – Russell
@ russell хорошо, вам нужно что-то хранить в браузере, не так ли? иначе вы не сможете идентифицировать его снова. Будь то фактические данные или идентификатор записи в таблице, это вопрос предпочтения и необходимость в отношении размера данных и других соображений. То, что я храню, уже является идентификатором записи в таблице. Я мог бы создать другую таблицу, но в этом случае это кажется пустой тратой. – Pablo
Я добавил ответ, потому что я думаю, что изменение хранилища сеансов по умолчанию для использования БД даст вам необходимую вам безопасность с очень небольшими накладными расходами на создание таблиц и т. Д. – Russell