Хранение паролей в базе данных

Хранение паролей в базе данных

Да, я знаю, что хранить пароли в обычном тексте не рекомендуется. Есть ли лучший и простой способ хранения паролей, чтобы приложение оставалось в безопасности?

Во-первых, md5 и sha1 оказались уязвимыми для атак на столкновение и могут быть легко разрешены радугой (когда они видят, является ли ваш хэш одинаковым в их базе данных общих паролей).

В настоящее время существует две вещи, которые достаточно безопасны для паролей, которые вы можете использовать.

Первый – sha512. sha512 является под-версией SHA2. SHA2 еще не доказано, что он уязвим для столкновений, а sha512 будет генерировать 512-битный хеш. Вот пример использования sha512:

Другой вариант называется bcrypt. bcrypt славится своими безопасными хэшами. Это, наверное, самый безопасный и самый настраиваемый.

Прежде чем вы начнете использовать bcrypt, вам нужно проверить, включен ли ваш сервер, введите этот код:

Если он вернет, что он включен, то следующий шаг будет прост, все, что вам нужно сделать, чтобы выполнить шифрование пароля (обратите внимание: для большей настраиваемости вам нужно это увидеть. Как вы используете bcrypt для хэширования паролей в PHP? ):

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

Алгоритмы хеширования, такие как sha1 и md5, не подходят для хранения паролей. Они разработаны, чтобы быть очень эффективными. Это означает, что грубое форсирование происходит очень быстро. Даже если хакер получает копию ваших хешированных паролей, довольно быстро переборщить ее. Если вы используете соль, это делает таблицы радуги менее эффективными, но ничего не делает против грубой силы. Использование более медленного алгоритма делает грубую силу неэффективной. Например, алгоритм bcrypt можно сделать так медленно, как вы хотите (просто измените коэффициент работы), и он использует соли внутри, чтобы защитить от радужных таблиц. Я бы пошел с таким подходом или подобным (например, scrypt или PBKDF2), если бы я был вами.

Храните уникальную соль для пользователя (например, сгенерированную из имени пользователя + электронной почты) и сохраните пароль. При входе в систему получите соль из базы данных и хэш-соль + пароль.
Используйте bcrypt для хеширования паролей.

Читайте также:  Серийный номер windows xp home edition

Пароли в базе данных должны храниться в зашифрованном виде. Рекомендуется одностороннее шифрование (хеширование), такое как SHA2, SHA2, WHIRLPOOL, bcrypt DELETED: MD5 или SHA1. (те, кто старше, уязвим

В дополнение к этому вы можете использовать дополнительную генерируемую пользователем произвольную строку – «соль»:

createSalt() в этом случае является функцией, которая генерирует строку из случайных символов.

EDIT: или если вы хотите больше безопасности, вы можете добавить 2 соли: $ salt1. $ pass. $ salt2

Другой мерой безопасности, которую вы можете предпринять, является инактивация пользователя: после 5 (или любого другого номера) неправильных попыток входа пользователь блокируется в течение минут (15 минут можно сказать). Это должно свести к минимуму успех нападений грубой силы.

лучше всего использовать crypt для хранения паролей в DB

Вы должны использовать одностороннее шифрование (что является способом шифрования значения, поэтому его очень сложно восстановить). Я не знаком с MySQL, но быстрый поиск показывает, что у него есть функция password (), которая делает именно такое шифрование. В БД вы храните зашифрованное значение, и когда пользователь хочет пройти аутентификацию, вы берете пароль, который он предоставил, вы шифруете его с использованием того же алгоритма / функции, а затем вы проверяете, что это значение совпадает с паролем, хранящимся в базе данных, для этого пользователя. Это предполагает, что связь между браузером и вашим сервером безопасна, а именно, что вы используете https.

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

upd: Задал вопрос некорректно. Данные находятся в БД, как этот самый БД защитить и где хранить следуя закону 152-ФЗ о перс. данных?
Заранее благодарен!

  • Вопрос задан более года назад
  • 2891 просмотр

Имя, email, телефон, пароль и другое хранят в базе данных или в крайнем случае в обычном .txt файле.

Читайте также:  Как передать с компа на комп файлы

Обратите внимание! То что вводит пользователь в поле пароль (например 12345) не записывают в базу данных. Создают хэш этого пароля + соль. Почитайте о солении паролей . На выходе в Вашей базе в поле password должен быть хэш (bdadb0330124cda0e8499c9cd118f7bd). Если пользователю нужно войти, то вы сравниваете хэш который получился после ввода пароля с тем который храниться в Вашей базе данных.

Пароли вообще не хранить. Платёжные данные — только если ты создал фишинговый сайт.

Остаются логины. Можешь хранить их хоть в блокнотике.

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. При разработке подсистем, взаимодействующих с различными внешними ресурсами (электронной почтой, веб-сервисами, FTP-ресурсами и т.п.) возникает необходимость запрашивать и передавать данные аутентификации к этим ресурсам: логин и пароль.

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

Таким образом, следует запрашивать логин и пароль у пользователя и передавать их сразу, не сохраняя в информационной базе.

3. В ряде случаев такая схема работы доставляет объективные неудобства или принципиально невозможна:

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

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

3.1. При этом не следует хранить пароли и другую конфиденциальную информацию в реквизитах тех же объектов метаданных, с которыми ведется повседневная работа. Для хранения такой информации следует использовать отдельный объект метаданных (например, регистр сведений), организовав к нему безопасный доступ на уровне системы прав доступа 1С:Предприятия.

Читайте также:  Не удалось установить соединение ftp

3.2. При использовании Библиотеки стандартных подсистем (БСП) следует использовать безопасное хранилище паролей, которое решает ряд задач:

  • Имея доступ к объекту метаданных, пользователь может прочитать содержимое реквизита с паролем, что невозможно при использовании безопасного хранилища. Для исключения случаев несанкционированного доступа к безопасному хранилищу получение и запись данных (паролей) возможна только в привилегированном режиме.
  • Данные в безопасном хранилище хранятся в закрытом виде и тем самым исключаются случаи непредумышленной «засветки» паролей.
  • Безопасное хранилище исключено из планов обмена, что предотвращает утечку паролей из информационной базы при обмене данными.

Для работы с безопасным хранилищем паролей предназначены процедуры и функции общего модуля ОбщегоНазначения : ЗаписатьДанныеВБезопасноеХранилище , ПрочитатьДанныеИзБезопасногоХранилища и УдалитьДанныеИзБезопасногоХранилища . Подробнее см. комментарии к этим функциям в БСП и раздел «3.4. Базовая функциональность — Использование при разработке конфигурации — Безопасное хранилище паролей» документации БСП.

3.3. Не следует хранить пароли в реквизитах формы, их следует извлекать только на стороне сервера и непосредственно перед их использованием. В противном случае, при открытии формы с маскированным вводом (или просмотром) пароля, пароль передается с сервера на клиент в открытом виде, что делает возможным его перехват. Установка привилегированного режима производится непосредственно перед вызовом функций, а не внутри них, что бы исключить получение или запись любых паролей в сеансе с любыми правами. Безопасность вызова должен обеспечивать вызывающий код, который обращается к конкретным паролям.

Для маскировки пароля на форме в обработчике событии формы ПриСозданииНаСервере необходимо разместить следующий код:

УстановитьПривилегированныйРежим(Истина);
Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Объект.Ссылка, "Пароль, ПарольSMTP"); // Пароль, ПарольSMTP – ключи соответствия данных в безопасном хранилище
УстановитьПривилегированныйРежим(Ложь);

Пароль = ?(ЗначениеЗаполнено(Пароли.Пароль), ЭтотОбъект.УникальныйИдентификатор, "");
ПарольSMTP = ?(ЗначениеЗаполнено(Пароли.ПарольSMTP), ЭтотОбъект.УникальныйИдентификатор, "");

В обработчике события формы ПриЗаписиНаСервере :

Если ПарольИзменен Тогда
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, Пароль);
УстановитьПривилегированныйРежим(Ложь);
Пароль = ?(ЗначениеЗаполнено(Пароль), ЭтотОбъект.УникальныйИдентификатор, "");
КонецЕсли;

Если ПарольSMTPИзменен Тогда
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, ПарольSMTP, "ПарольSMTP");
УстановитьПривилегированныйРежим(Ложь);
ПарольSMTP = ?(ЗначениеЗаполнено(ПарольSMTP), ЭтотОбъект.УникальныйИдентификатор, "");
КонецЕсли;

где Пароль и ПарольSMTP — реквизиты формы. Если пароль ранее был сохранен в программе, то следует присвоить соответствующему реквизиту уникальный идентификатор формы, эмулирующий наличие пароля. При записи объекта в форме, если был введен новый пароль, то записываем его в объект, а реквизит формы вновь затираем уникальным идентификатором.

Ссылка на основную публикацию
Хороший ламповый усилитель для дома
Почти у каждого ненормального с гитарой (а иногда даже и без нее) появляется навязчивая идея принести домой фанерный ящик с...
Файлы mdi чем открыть
Если вы не смогли открыть файл двойным нажатием на него, то вам следует скачать и установить одну из программ представленных...
Файлы mdx чем открыть
MDX - это формат образов дисков, который был создан разработчиками программы DAEMON Tools. Это формат был создан в результате усовершенствования...
Хороший переводчик английского языка
Оцените наш проект! Правильный переводчик онлайн позволяет довольно качественно и оперативно выполнять следующие операции: - изучать один либо одновременно несколько...
Adblock detector