Предпочтительный метод хранения паролей в базе данных

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

$(this).load(actionURL, function (html) {
    // Reparse the validator
    var form = $('form');
    form.data('validator', null);
    $.validator.unobtrusive.parse(form);
    $('form', html).submit(function () {
        ....

Боковое примечание: код, который вы показали, не включает @Html.ValidationMessageFor(m => m.MaterialCode), но я предполагаю, что это включено.

76
задан Brian 5 March 2009 в 17:29
поделиться

9 ответов

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

слишком опасно когда-либо хранить литеральные данные пароля где угодно. Это делает восстановление невозможным, но когда кто-то забывает или теряет пароль, можно пробежать некоторые проверки и создать новый пароль.

82
ответ дан Brian 7 November 2019 в 06:49
поделиться

Предпочтительный метод: никогда не храните пароли в своем DB. Только хеши этого. Добавьте соль для дегустации.

48
ответ дан Assaf Lavie 7 November 2019 в 06:49
поделиться

Я делаю то же самое, которое Вы описали, кроме него хранится как Строка. Я Base64 кодирую зашифрованное двоичное значение. Сумма пространства для выделения зависит от алгоритма шифрования / сила шифра.

я думаю, что Вы делаете его правильно (учитывая, что Вы используете Соль ).

15
ответ дан Josh Stodola 7 November 2019 в 06:49
поделиться
  1. хранят хеш соленого пароля, такого как bcrypt (nounce+pwd). Можно предпочесть bcrypt по SHA1 или MD5, потому что он может быть настроен для ЦП, поэтому делая атаку перебором путем дольше.
  2. добавляют капчу к форме входа в систему после нескольких ошибок входа в систему (для предотвращения атак перебором)
  3. , если приложение имеет, "забыл мой пароль" ссылка, удостоверьтесь, что это не отправляет новый пароль по электронной почте, но вместо этого это должно отправить ссылку к (защищенной) странице, разрешающей пользователю определить новый пароль (возможно только после подтверждения некоторых персональных данных, таких как дата рождения пользователя, например). Кроме того, если Ваше приложение позволяет пользователю определять новый пароль, удостоверьтесь, что Вы требуете, чтобы пользователь подтвердил текущий пароль.
  4. и очевидно, защитите форму входа в систему (обычно с HTTPS) и сами серверы

С этими мерами, пароли Вашего пользователя будут довольно хорошо защищены от:

  1. => офлайновые атаки с подбором по словарю
  2. => живые атаки с подбором по словарю
  3. => атаки "отказ в обслуживании"
  4. => все виды нападений!
9
ответ дан MiniQuark 7 November 2019 в 06:49
поделиться

Так как результатом хеш-функции является ряд байта в диапазоне от 0 до 255 (или-128 к 127, завися со знаком из Вашего 8-разрядного типа данных), храня его, поскольку необработанное двоичное поле имеет большую часть смысла, поскольку это - самое компактное представление и не требует никакого дополнительного кодирования и декодирования шагов.

базы данных Some или драйверы не имеют большой поддержки двоичных типов данных, или иногда разработчики просто не достаточно знакомы с ними для чувствования себя комфортно. В этом случае использование двоичного файла к тексту, кодирующего как Основа 64 или Основа 85, и хранящего получающийся текст в символьном поле, приемлемо.

размер необходимого поля убежден хеш-функцией, что Вы используете. MD5 всегда выводы 16 байтов, SHA-1 всегда выводы 20 байтов. Как только Вы выбираете хеш-функцию, Вы обычно застреваете с нею, поскольку изменение требует сброса всех текущих паролей. Так, использование поля переменного размера не покупает Вас ничто.

<час>

Относительно "лучшего" способа выполнить хеширование, я попытался предоставить много ответов на другой ТАК вопросы по той теме:

8
ответ дан Community 7 November 2019 в 06:49
поделиться

Я использую sha хеш имени пользователя, гуида в веб-конфигурации и пароля, сохраненного как varchar (40). Если они захотят к грубой силе / словарь, то они должны будут взломать веб-сервер для гуида также. Повреждения имени пользователя, составляющие таблицу радуги через целую базу данных, если они действительно находят пароль. Если пользователь хочет изменить их имя пользователя, я просто изменил пароль одновременно.

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(
    username.ToLower().Trim(),
    ConfigurationManager.AppSettings("salt"),
    password
);
4
ответ дан Shawn 7 November 2019 в 06:49
поделиться

Простой хеш пароля, или даже (соль + пароль) обычно не соответствует.

см.:

http://www.matasano.com/log/958/enough-with-the-rainbow-tables-what-you-need-to-know-about-secure-password-schemes/

и

http://gom-jabbar.org/articles/2008/12/03/why-you-should-use-bcrypt-to-store-your-passwords

Оба рекомендуют bcrypt алгоритмы. Бесплатные реализации могут быть найдены онлайн для большинства популярных языков.

3
ответ дан finnw 7 November 2019 в 06:49
поделиться

Если Вы работаете с ASP.NET, можно использовать созданный в API членства.

Это поддерживает много типов возможностей хранения, включая; односторонний хэш, два пути шифрование, md5 + соль. http://www.asp.net/learn/security для большего количества информации

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

, Если Вы не используете ASP.NET вот, хорошая ссылка на несколько статей от 4guys и codeproject

http://aspnet.4guysfromrolla.com/articles/081705-1.aspx http://aspnet.4guysfromrolla.com/articles/103002-1.aspx http://www.codeproject.com/KB/security/SimpleEncryption.aspx

2
ответ дан Sruly 7 November 2019 в 06:49
поделиться

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

{hashId} $ {соль} $ {хешированный пароль}

где "hashId" является просто некоторым числом, я использую внутренне, чтобы распознать, что, например, я использую SHA1 с определенным шаблоном хеша; "соль" является base64-закодированной случайной солью; и "хешированный пароль" является base64-закодированным хешем. Если необходимо переместить хеши, можно прервать людей с форматом старого пароля и заставить их изменить свой пароль в следующий раз, когда они входят в систему.

Поскольку другие упомянули, что Вы хотите быть осторожными со своими хешами, так как легко сделать что-то, что это не действительно безопасно, например, H (соль, пароль) намного более слабо, чем H (пароль, соль), но в то же время Вы хотите сбалансировать усилия, приложенные к этому со значением контента сайта. Я буду часто использовать H (H (пароль, соль), пароль).

Наконец, стоимость использования base64-закодированных паролей скромна по сравнению с преимуществами способности использовать различные инструменты, которые ожидают текстовые данные. Да, они должны быть более гибкими, но Вы готовы сказать Вашему боссу, что он не может использовать свой любимый сторонний инструмент, потому что Вы хотите сохранить несколько байтов на запись?:-)

Отредактированный для добавления еще одного комментария: если бы я предложил сознательно использовать алгоритм, который записал даже 1/10-е из второго хеширования каждого пароля, то мне посчастливилось бы просто смеяться из офиса моего босса. (Не настолько удачный? Он кратко записал бы что-то для обсуждения в моем следующем ежегодном обзоре.) Запись то время не является проблемой, когда у Вас есть десятки или даже сотни, пользователей. При продвижении 100k пользователей, у Вас обычно будет несколько человек, входящих в систему одновременно. Вам нужно что-то быстрое и сильное, не медленное и сильное. "Но что относительно данных кредитной карт?" лицемерно в лучшем случае, так как сохраненные данные кредитной карты не должны быть в какой-либо степени Вашей регулярной базой данных и будут зашифрованы приложением так или иначе, не отдельными пользователями.

3
ответ дан bgiles 24 November 2019 в 11:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: