Когда это - хорошая идея сохранить пароли в открытом тексте?

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

Я использую поставщика членства ASP.NET, который предоставляет 3 возможности для хранения паролей - Открытый текст, Хешированный, Зашифрованный.

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

18
задан Nick 19 January 2010 в 15:42
поделиться

12 ответов

Никогда.

Есть Никогда не веская причина хранить пароли в вашей базе данных , когда-либо. Особенно не в чистом тексте. Вы должны хранить хеш пароля .

Худшее Худшее вещь, которую вы можете сделать для пользователя, транслируют свой «восстановленный» пароль через Интернет в электронной почте Clear-Text. Это так просто просто сохранить односторонний хэш пароля, который не может быть восстановлен .

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

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

У вас нет ответственности для защиты паролей пользователей, независимо от того, насколько тривиально ваша заявка.

67
ответ дан 30 November 2019 в 05:37
поделиться

Документы содержат довольно длинное объяснение того, почему Apple не хочет, чтобы вы делали это, и почему они явно не поддерживают его в Получение изменяемых объектов . Резюме:

Поэтому не принимайте решения по объекту изменяемость, основанная на том, что самоанализ рассказывает о предмете. Удовольствие объекты как изменяемые или не основанные на что вам вручают в API границы (то есть на основе тип возврата). Если нужно однозначно отметить объект как изменяемый или неизменяемый при передаче клиентам, передайте эту информацию как флаг вместе с объектом.

Я нахожу их пример NSView самым простым для понимания, и он иллюстрирует основную проблему какао. У вас есть NSMuterArray с именем «elements», который вы хотите представить как массив, но не хотите, чтобы вызывающие абоненты связывались с ним. У вас есть несколько вариантов:

  1. Выставляйте NSMuterArray как NSAray.
  2. Всегда создавать неизменяемую копию при запросе
  3. Сохранять элементы как NSAray и создавать новый массив каждый раз, когда он мутирует.

Я сделал все это в различные точки. # 1 - самое простое и быстрое решение. Это также опасно, так как массив может мутировать за спиной звонящего. Но Apple указывает на то, что они делают в некоторых случаях (обратите внимание на предупреждение для -subviews в NSView). Я могу подтвердить, что, хотя # 2 и # 3 гораздо безопаснее, они могут создавать серьезные проблемы с производительностью, что, вероятно, и является причиной того, что Apple решила не использовать их на часто доступных членах, таких как -subviews.

Суть всего этого в том, что если вы используете # 1, то самоанализ введет вас в заблуждение. В качестве NSAray используется приведение NSMuterArray, и самоанализ указывает на возможность его изменения (самоанализ не имеет пути знать об обратном). Но вы не должны его мутировать. Только проверка типа компиляции может вам это сказать, и это единственное, чему вы можете доверять.

Исправлением для этого была бы какая-то быстрая неизменяемая версия изменяемой структуры данных с возможностью копирования на запись. Таким образом, # 2 можно было бы сделать с достойной производительностью. Я могу представить себе изменения в кластере NSAray, которые позволили бы это сделать, но его сегодня нет в какао (и он может повлиять на производительность NSAray в обычном случае, что делает его не стартером). Даже если бы он был у нас, там, вероятно, слишком много кода, который полагается на текущее поведение, чтобы когда-либо позволить самоанализу мутабельности быть доверенным.

-121--3815238-

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

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

Люди используют один и тот же пароль во многих учетных записях. Если база данных каким-либо путь скомпрометирована, вы выдаете пароли, которые могут использоваться, например, в банковских счетах.

Если вы считаете, что сброс пароля не предназначен для нетехнических людей, по крайней мере, создайте форму для изменения пароля, как это делает Gmail.

Я не знаю в США, но, по крайней мере, в моей стране,если бы скомпрометированная система хранила в ней мои пароли, я бы попытался засудить их, потому что у нас есть способы предотвратить хранение четких текстовых паролей.

-121--2227595-

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

Именно тогда вы сохраняете пароли в чистом тексте.

9
ответ дан 30 November 2019 в 05:37
поделиться

Я полагаю, есть одна ситуация, когда подходит для хранения паролей в Clear-Text.

Если вы пишете приложение для использования в качестве примера «До» в демонстрации о том, как писать безопасный код, чтобы вы могли показать, как реализовать методы шифрования / хеширования для паролей.

3
ответ дан 30 November 2019 в 05:37
поделиться

Основной проблемой является распределение линий в квадрате или прямоугольнике. Это можно сделать более чем геометрически или используя целочисленные массивы. Я попробую целочисленные массивы здесь.

Пусть М - матрица вашей головоломки,

A B C D
E F G H
I J K L
M N O P

Пусть слово «EFGH» - существующее слово, а также «CGKO». Затем создайте матрицу, которая будет содержать число членств в восемьдесят слов в каждой ячейке:

0 0 1 0
1 1 2 1
0 0 1 0
0 0 1 0

Примените правило: текущее значение ячейки равно сумме всех соседей (4-way) и умножить на исходное значение ячейки, если исходное значение равно 2 или выше.

0 0 1 0      1 2 2 2
1 1 2 1  -\  1 3 8 2
0 0 1 0  -/  1 2 3 2
0 0 1 0      0 1 1 1

И подведите итог всех ценностей в рядах и колонках матрица:

1 2 2 2 =  7
1 3 8 2 = 14
1 2 3 2 =  8
0 1 1 1 =  3
| | | |
3 7 | 6
    14

Тогда вычисляют среднее число обоих наборов результата:

(7 + 14 + 8 + 3) / 4 = 32 / 4 = 8
(3 + 7 + 14 + 6) / 4 = 30 / 4 = 7.5

И вычисляют среднее различие к среднему числу каждого набора результата:

3  <-> 7.5 = 4.5       7  <-> 8 = 1
7  <-> 7.5 = 0.5       14 <-> 8 = 6
14 <-> 7.5 = 6.5       8  <-> 8 = 0
6  <-> 7.5 = 1.5       3  <-> 8 = 5
             ___avg               ___avg
             3.25                 3

И умножают их вместе:

3 * 3.25 = 9.75

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

Вот пример неправильного распределения:

1 0 0 0      1 1 0 0      2
1 0 0 0  -\  2 1 0 0  -\  3         -\  C avg 2.5  -\  C avg-2-avg 0.5
1 0 0 0  -/  2 1 0 0  -/  3         -/  R avg 2.5  -/  R avg-2-avg 2.5
1 0 0 0      1 1 0 0      2                                       _____*
                           6 4 0 0                                 1.25 < score

Edit: calc. исправлены ошибки.

-121--5044744-

Хорошо, похоже, ваш пост был изменен...

double foo[4];
double *bar_1 = &foo[0];

Как можно использовать и для получения адреса начала структуры массива? Следующее

Foo_1(double *bar, int size){ return bar[size-1]; }
Foo_2(double bar[], int size){ return bar[size-1]; }

сделает то же самое.

-121--569372-

Нет, никогда не хорошая идея, не важно, насколько глупо ваше приложение.

11
ответ дан 30 November 2019 в 05:37
поделиться

Для любой достоверной информации по юридическим причинам обратитесь к адвокату. В США вы должны быть в состоянии получить направление от вашего местного ассоциации Бар. Я не адвокат, и это не юридическая консультация.

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

Итак, юридические обязательства потенциально большие. Проконсультируйтесь с адвокатом перед сохранением паролей ClearText.

1
ответ дан 30 November 2019 в 05:37
поделиться

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

Ваша целевая аудитория может быть не технической, но это не будет в случае с их друзьями, которые являются случайными / профессиональными пакетами. Не технические пользователи должны рассматриваться с дополнительной осторожностью, потому что они с большей вероятностью сохранят одно и то же имя пользователя / пароль для вашего небольшого приложения, учетная запись Google и учетная запись онлайн-банкинга (если Банк принимает этот пароль). Они потеряют свои данные / почтовые счета / деньги, и вы потеряете доверие и клиентов.

Вот блог пост на Хранение паролей в базах данных стоит чтение по @Codinghorror

2
ответ дан 30 November 2019 в 05:37
поделиться

Лучшее место для такого... в любом месте, просто импортируйте его в файл urls.py (по понятным причинам urls загружаются перед любыми запросами).

-121--3643188-

Вместо Show необходимо использовать SunDialog . Показать, что приложение не блокируется, и код продолжает работать.

Объект удаляется при создании графического интерфейса (что и было сказано в исключении)

Попробуйте выполнить следующие действия:

if (frmMain.objfrm== null)
{   
     frmMain.objfrm = frmMyForm.Instance;     
     frmMain.objfrm.ShowInTaskbar = false;    
}
frmMain.objfrm.ShowDialog();

Обратите внимание на SunDialog ()

-121--4605461-

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

1
ответ дан 30 November 2019 в 05:37
поделиться

Вы должны хранить только пароли в чистом тексте, когда вы хотите, чтобы кто-то их было легко получить. Для вашей USECASE я бы предложил вариант, в котором пользователь входит в их e-mailadress и получает электронное письмо, содержащее ссылку, с которой они могут войти в систему. Когда они должны иметь возможность изменить пароль, если они хотят, но если Большинство пользователей не являются частыми посетителями, они могут даже не хотеть изменить свой пароль, так как они забудут его до следующего визита.

0
ответ дан 30 November 2019 в 05:37
поделиться

Серьезно я не думаю, что это хорошая идея когда-либо ..

0
ответ дан 30 November 2019 в 05:37
поделиться

Вот несколько причин использования незашифрованных паролей:

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

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

19
ответ дан 30 November 2019 в 05:37
поделиться

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

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

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

Если вы думаете, что сброс пароля это не для людей без Techie, по крайней мере, создать форму, чтобы изменить пароль, такой как Gmail.

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

0
ответ дан 30 November 2019 в 05:37
поделиться

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

Есть установленная структура дизайна для паролей:

  1. HASH их
  2. Предоставить пользователю ссылку на забытый пароль
  3. Пользователь вводит адрес электронной почты, связанный со своей учетной записью
  4. Ссылка на сброс или TEMP сгенерированный пароль, отправлен по электронной почте К своему адресу
  5. они сразу предлагаются указать новый пароль при посещении ссылки или использования пароля Temp.

Это общий обзор, и это ожидаемый подход. Существуют другие вариации, такие как предоставление вопросов безопасности.

1
ответ дан 30 November 2019 в 05:37
поделиться
Другие вопросы по тегам:

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