Есть ли причина безопасности, чтобы не раскрывать существование идентификатора пользователя? - PullRequest
5 голосов
/ 21 мая 2010

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

Существует ли причина безопасности, по которой не раскрывается существование идентификатора пользователя?

Ответы [ 6 ]

9 голосов
/ 21 мая 2010

Да, есть.

Вы хотите дать злоумышленникам как можно меньше информации

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

Если злоумышленник не знает, что такое действительное имя пользователя, ему, по сути, придется взломать пароль, который очень важен: Username.Length + Password.Length, что увеличивает время, необходимое для взлома учетной записи.

3 голосов
/ 21 мая 2010

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

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

2 голосов
/ 27 мая 2010

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

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

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

Пример электронной почты особенно ироничен, поскольку весь смысл адреса электронной почты состоит в том, чтобы дать его другим людям, чтобы они могли отправить вам электронное письмо. Адреса электронной почты не секретны. (Конечно, вы не хотели бы давать список существующих адресов, но говорить, существует ли данный адрес или нет, это другое дело.)

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

Имя пользователя не является секретным (теоретическое)

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

Поскольку имя пользователя обычно не может быть по-настоящему секретным (в конце концов, оно идентифицирует пользователя), оно может стать «полусекретным»: то, что обычно не , как правило, раскрывается, но происходит, если вы нажимаете достаточно сильно. Люди часто думают, что два "полсекреты" делают секрет, но они этого не делают. Конечно, они не думают об этом в таких терминах. Вместо этого они подумают: «Это не так уж плохо, если у меня есть простой ПИН-код, потому что никто не может использовать его без моей банковской карты, в любом случае» и отдельно подумают: «Не так уж плохо, если я потеряю свою банковскую карту, потому что никто не может использовать его без ПИН-кода в любом случае».

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

2 голосов
/ 21 мая 2010

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

0 голосов
/ 21 мая 2010

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

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

0 голосов
/ 21 мая 2010

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

...