Замена незашифрованного пароля для приложения

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

6
задан Community 12 September 2008 в 14:14
поделиться

14 ответов

Абсолютно ни один. Но это не имеет значения. Я отправил подобный ответ прежде:

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

15
ответ дан 8 December 2019 в 02:14
поделиться

Из Википедии

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

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

Общий approache хранит только "хешированную" форму незашифрованного пароля. Когда пользователь вводит в пароле в такой системе, программное обеспечение обработки пароля пробегает криптографический хеш-алгоритм, и если значение хэш-функции, сгенерированное от записи пользователя, соответствует хешу, сохраненному в базе данных пароля, пользователю разрешают доступ. Значение хэш-функции создается путем применения криптографической хеш-функции к строке, состоящей из отправленного пароля и, обычно, другое значение, известное как соль. Соль препятствует тому, чтобы взломщики создали список значений хэш-функции для общих паролей. MD5 и SHA1 являются часто используемыми криптографическими хеш-функциями.

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

6
ответ дан 8 December 2019 в 02:14
поделиться

Нет абсолютно никакого оправдания хранению незашифрованных паролей на веб-приложении. Используйте стандартный алгоритм хеширования (SHA-1, не MD5!) с соленым значением, так, чтобы нападения радуги были невозможны.

5
ответ дан 8 December 2019 в 02:14
поделиться

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

Предотвратить против словаря/хеша нападает убедиться хешировать против маркера, это уникально для каждого пользователя и помех (имя пользователя/соединение date/userguid работы хорошо)

3
ответ дан 8 December 2019 в 02:14
поделиться

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

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

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

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

3
ответ дан 8 December 2019 в 02:14
поделиться

Если Вы не солите свой Пароль, Вы - подозреваемый к нападениям Таблицы Радуги (предварительно скомпилированные Словари, которые имеют допустимые исходные данные для данного хеша),

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

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

Так: Посолите свои пароли (путем добавления Соли к правой стороне пароля*) и используйте хорошее хеширование algorhithm как SHA-1 или предпочтительно SHA-256 или SHA-512.

PS: Немного больше детали о Хешах здесь.

*я немного не уверен, должна ли Соль к к началу или в конец строки. Проблема состоит в том, что, если Вы имеете, коллизии (два исходных данных с тем же хешем), добавляя Соль к "неправильной" стороне не изменят получающийся хеш. Всегда, у Вас не будет больших проблем с Таблицами Радуги, только с коллизиями

3
ответ дан 8 December 2019 в 02:14
поделиться

Существует старая поговорка о программистах, симулирующих быть шифровальщиками :)

У Jeff Atwood есть хорошее сообщение на предмете: Вы, Вероятно, Храните Пароли Неправильно

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

3
ответ дан 8 December 2019 в 02:14
поделиться

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

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

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

2
ответ дан 8 December 2019 в 02:14
поделиться

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

1
ответ дан 8 December 2019 в 02:14
поделиться

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

1
ответ дан 8 December 2019 в 02:14
поделиться

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

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

String hashedPass=CryptUtils.MD5("alsdl;ksahglhkjfsdkjhkjhkfsdlsdf" + user.getCreateDate().toString() +  user.getPassword);

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

1
ответ дан 8 December 2019 в 02:14
поделиться

Ничто не менее безопасно, чем хранение незашифрованных паролей. При использовании достойного алгоритма хеширования (по крайней мере, SHA-256, но даже SHA-1 лучше чем ничего), затем да, коллизии возможны, но он не имеет значения, потому что, учитывая хеш, это невозможно* для вычисления то, что строки хешируют к нему. Если Вы хешируете имя пользователя С паролем, то та возможность идет из окна также.

* - технически не невозможный, но "в вычислительном отношении неосуществимый"

Если имя пользователя является "graeme", и пароль является "stackoverflow", то создайте строку "graeme-stackoverflow-1234", где 1234 является случайным числом, то хешируйте его и сохраните "hashoutput1234" в базе данных. Когда дело доходит до проверки пароля возьмите имя пользователя, предоставленный пароль и число от конца хранимой суммы (хеш имеет фиксированную длину, таким образом, можно всегда делать это), и хешируйте их вместе и сравните его с частью хеша хранимой суммы.

1
ответ дан 8 December 2019 в 02:14
поделиться

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

Да и нет. Используйте современный алгоритм хеширования, как вариант SHA, и тот аргумент добирается очень, очень неделя. Вы должны действительно быть взволнованы, собирается ли та атака перебором занять только 352 года вместо 467 лет? (Анекдотическая шутка там.) Значение, которое будет получено (не хранение пароля в простом тексте в системе) далеко, опережает беспокойство Вашего коллеги.

0
ответ дан 8 December 2019 в 02:14
поделиться

Надежда, которую Вы прощаете мне за включение решения, которое я записал на этом, с помощью стороны клиента JavaScript для хеширования пароля, прежде чем это будет передано: http://blog.asgeirnilsen.com/2005/11/password-authentication-without.html

0
ответ дан 8 December 2019 в 02:14
поделиться
Другие вопросы по тегам:

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