2015-03-24 6 views
0

В настоящее время я читаю книгу Майкла Хартля (учебное пособие по Ruby on Rails, третье издание), и он использует модель его аутентификации, я проверил курс Rails в прагматичной студии и в своем примере видео, они используют passowrd_hash/password_salt в их модели аутентификации. Из wikipediaing кажется, что соль является стандартным применением в криптографии и имеет множество применений для обеспечения безопасности. Все, что я действительно мог найти на password_digest, это работает с методом рельсов has_secure_password.password_hash/password_salt vs password_digest

Является ли это предпочтительным по сравнению с другими или в конечном итоге они служат для разных целей?

ответ

1

строительство вручную соленый хеш (на основе, например, SHA1) действительно долгое время использовался для хранения паролей по умолчанию. Однако с тех пор, как через пару лет стало ясно, что должны быть лучшие (то есть более безопасные) способы хранения пароля, которые гарантируют, что даже если злоумышленник сможет получить доступ к сырым хешам, они не смогут легко переубедить их ,

Как и в случае с новыми версиями Rails, пароли по умолчанию сохраняются с has_secure_password с использованием алгоритма Bcrypt, который гораздо более подходит для хранения паролей, чем простой солевой хеш. Обратите внимание, что Bcrypt также использует соль внутри. Вам просто не нужно заниматься этим самостоятельно.

+0

Я вижу, спасибо за объяснение. Вопрос: я в настоящее время возился с [этим примером] (http://nycda.com/blog/basic-user-authentication-model-in-rails-4/), это было бы примером более старшего правильного пути? – BronzeTax

+0

В учебнике используется тот же алгоритм хэширования. Он просто строит все из рук, которое может не понадобиться, если вы используете 'has_secure_password'. Однако в любом случае вы должны попытаться получить хорошее представление о том, как работают все эти решения. Значительная часть безопасности вашего приложения будет зависеть от этого. –

+0

Благодарим вас за объяснение. Я следил за этим и руководство Hartl по прокату моей собственной модели аутентификации по этой точной причине, о которой вы говорили. Во многих других скринканах они просто говорят вам использовать Devise, и пусть «магия» позаботится о тяжелом подъеме, но мне нравится знать подробности. Я не собираюсь просто собирать кучу драгоценных камней вместе, я хочу узнать, как RoR работает с низкой точки зрения. – BronzeTax

2

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

Как взяты из документации has_secure_password:

# Schema: User(name:string, password_digest:string) 
class User < ActiveRecord::Base 
    has_secure_password 
end 

user = User.new(name: 'david', password: '', password_confirmation: 'nomatch') 
user.save 
# => false, password required 

user.password = 'mUc3m00RsqyRe' 
user.save 
# => false, confirmation doesn't match 

user.password_confirmation = 'mUc3m00RsqyRe' 
user.save            
# => true 

user.authenticate('notright')         
# => false 
user.authenticate('mUc3m00RsqyRe')        
# => user 
User.find_by(name: 'david').try(:authenticate, 'notright') 
# => false 
User.find_by(name: 'david').try(:authenticate, 'mUc3m00RsqyRe') 
# => user 

Обе системы вы упомянули будет работать, это просто сводится на то, что вы хотите использовать, какие варианты у вас есть в наличии и т.д.

1

Метод Hartl использует, has_secure_password, uses алгоритм называется Bcrypt к соли и хэш пароля, производя password_digest строку, которая имеет три компонента:

  1. Флаг, который указывает, что строка является Bcrypt хэш
  2. The (unhashed) соль
  3. результат хеширования пароль + соль

Я не знаком с Prag matic Studio, но похоже, что они хранят соль и хэш в разных атрибутах.

Смежные вопросы