Я использую bcrypt for password hashing всюду в своих приложениях php. Тем не менее, существует выбор между использованием bcrypt in the database или использованием bcrypt in php code. Хотя я считаю, что использование bcrypt лучше, чем большинство других вариантов хеширования, безопаснее ли использовать bcrypt через функцию в базе данных или через функцию в php?Хэш-пароли с bcrypt в базе данных или в php-коде?
ответ
Я бы выбрал второй вариант и вычислил хэш-код BCrypt в PHP-коде.
Если вы разместите в инструкции SQL пароль, есть дополнительные возможности, которые могут быть утечки. Сначала подключение к базе данных должно быть безопасным, а затем оно может оказаться в файлах журналов.
Если вы разместили в инструкции SQL хэш-код, вам нужно только заботиться о безопасной передаче в приложение, остальное будет безопасным, потому что может произойти утечка только хэша. В качестве бонуса вам не нужно заботиться о проблемах с SQL-инъекциями и кодированием/экранированием. Другим преимуществом является то, что вы независимы от системы баз данных, вы также можете поддерживать базы данных без реализации BCrypt (большинство баз данных не предлагают функцию BCrypt или только путем установки расширения).
Лично я думаю, что это может пойти так или иначе:
Если вы говорите, что исходный пароль может быть фыркнул от на пути к базе данных, то же самое относится и к хэшей. Единственная добавленная безопасность - Security through obscurity. Они не знают, какой алгоритм хеширования вы используете, и когда они узнают, хеши могут быть взломаны со временем.
Проблема в том, что люди могут обманывать данные из PHP в базу данных, а не отправлять необработанный пароль. Если вы используете SSL с вашей базой данных, у вас не должно быть проблем. (Если только ваша база данных не регистрирует, какие запросы были отправлены, если ваша база данных выполняет запросы на журнал, то вы должны использовать хэш с PHP)
Потенциал роста базы данных будет заключаться в том, что он быстрее.
Ну, одна проблема, с которой я столкнулся, заключается в том, что кто-то всегда может включить ведение журнала запросов на сервере, а затем они получат пароли открытого текста. Я полагаю, что кто-то всегда мог просто вставлять какой-то журнал или завиток в php. Ошибки php или sql, которые плохо синхронизированы, также могут привести к тому, что пароль открытого текста будет отображаться в журналах. Аспект скорости звучит разумно, но в то же время я не уверен, что быстрее для bcrypt.Скорее, использование меньших ресурсов процессора и памяти является важным аспектом, и я не уверен, что это как четкое сокращение выигрыша для реализации базы данных. – Kzqai
Ну, если кто-нибудь может вставить что-нибудь в ваши PHP-скрипты, это действительно не должно происходить. Быстрее будет означать, что выполнение PHP будет выполняться быстрее, потому что вместо этого хэш рассчитывается для базы данных. –
@DaveChen - Это никоим образом не безопасность через неясность. Это целая цель медленных функций генерации ключей, чтобы помешать атакам грубой силы. Хеширование паролей выполняется для случая, что кто-то может украсть вашу базу данных, поэтому получение только хеша - это путь лучше, чем получение пароля обычного текста. Кстати, в большинстве случаев вы можете сказать хэширование BCrypt, просто глядя на подпись. – martinstoeckli
Что вы подразумеваете под улучшением? –
Я думаю, что это своего рода POB. Но если ваша база данных * удалена * и без SSL, тогда сначала может быть хэш, а затем отправить его. –
Если вы хешируете на уровне db, тогда все еще есть шанс, что кто-то может получить версию обычного текста из формы до того, как он получит хэшированный я всегда хэш после отправки формы, чтобы хэш мог быть сохранен в базе данных. – Sephedo