Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
На самом деле мне всегда не нравился OpenID по различным причинам.
я должен доверять поставщику OpenID, которому я дал свои данные. Я действительно доверяю определенные стороны определенным степеням, но просто потому что я могу доверять Переполнению стека, я автоматически не доверяю ни одному из известных поставщиков OpenID.
, Если мой пароль OpenID поставлен под угрозу, все мои сайты, где я использую OpenID, поставлены под угрозу. Обычно я был бы, выбрал другой пароль для каждого сайта, который я использую, но я не могу с OpenID.
мне не нравится понятие Персоны вообще. Даже при том, что меня спрашивают, прежде чем любые данные отправляются, они просто не кажутся правильным, что у одного поставщика есть эта информация, и другие сервисы могут запросить это. Хорошо, я не должен использовать его, если мне не нравится, но понятие кажется дефектным мне.
, Как уже был упомянут, данные отправляются между сайтом и поставщиком OpenID и назад снова. Каждый раз, когда данные переданы, они могут быть поставлены под угрозу. Никакая система не является на 100% защищенной; даже SSL (HTTPS). Вот в чем разница, если данные только перемещаются от меня до стороны и назад мне или если это также перемещается от той стороны до другого и назад снова.
, Если поставщик OpenID взламывается и хакер получает данные входа в систему всех пользователей (в конце концов, они прекрасны централизованный в одном месте!), просто думайте о влиянии!
Только для именования некоторых. Мне также не удается видеть большое преимущество OpenID. Для пользователя они говорят
Хорошо, давайте проанализируем это.
(1), Как часто Вы регистрируетесь для страницы в день? 200 раз? Если я регистрируюсь для 2 страниц в неделю, который уже является проклятой партией. Обычно скорее для 2-3 месяцы самое большее (на самом деле Переполнение стека или мой поставщик OpenID для использования Переполнения стека, было последней страницей, которую я зарегистрировал и это было не совсем вчера). Таким образом, когда Вы регистрируетесь для 2 сайтов в месяц, у Вас нет этих 5 минут, которые требуется для заполнения формы? Продвиньтесь, не будьте смешны.
(2), Как? Поскольку это использует тот же пароль везде? "Это не будущее, это - ошибка", сказало бы большинство специалистов по безопасности. Или потому что это позволяет мне восстанавливать свой пароль через почту? Ну, на самом деле почти любая сторона, которую я использую, позволяет мне делать так. Несмотря на это, мой Firefox помнит мои пароли вполне хорошо, хранилища их зашифрованный на диске (использующий основной пароль) и эта зашифрованная база данных копируется регулярно, чтобы никогда не потеряться.
(3) ну, это - вероятно, что-то положительное... однако, мое имя никогда не изменялось до сих пор, мой адрес электронной почты не будет ни один, поскольку это - один из домена, который я использую и переданный действительному адресу (таким образом, реальный может измениться, я просто обновляю вперед, и все работает прежде). Мой конкретный адрес? Ну, некоторые люди перемещаются много. Я только переместился однажды в свою целую жизнь до сих пор. Однако большинство сторон не должно знать мой конкретный адрес. Сайты, где я не вижу оснований для того, чтобы иметь людей, знают эту информацию, но которые требуют меня, чтобы заполнить ее для регистрации, просто получить фальшивую. Существуют очень небольшие сайты в целом Интернете, которые знают мой действительный адрес (на самом деле только те, которым, вероятно, когда-либо придется отправлять мне обычную почту или где я мог бы заказать товары).
(4) На самом деле я вижу его наоборот. Это максимизирует угрозу безопасности. Как это минимизировало бы риск?
OpenID по сути небезопасен. Это работает Вашим сайтом, перенаправляющим пользователя к их открываемое сайт поставщика ID и затем принимающий идентификатор назад от того сайта. Это обеспечивает ненадежность в обоих направлениях. Необходимо доверять идентификатору, который возвращается (поскольку у Вас нет способа аутентифицировать пользователя самих), и это просто в эксплуатации, прокси к user’s открывает поставщика ID, который позволяет Вам красть их имя пользователя и пароль.
OpenID хорошо для чего-то как Переполнение стека, где это, doesn’t действительно имеют значение, исполняет ли кто-то роль Вас. Используя OpenID для сайтов с более серьезным †“на персональном уровне †“содержание чрезвычайно опасно. Если Вы используете OpenID для своей электронной почты, например, то любой крадущий Ваш идентификатор может получить доступ к Вашей электронной почте. Они могли тогда в свою очередь отправить запросы напоминания о пароле на другие сайты, которые Вы используете для получения паролей для тех сайтов. В худшем случае Вы могли использовать OpenID для банковского счета или иметь банк, который отправляет напоминания о пароле в Ваш почтовый ящик...
существуют многочисленные другие проблемы безопасности с OpenID. Можно найти больше информации в "Конфиденциальность в Интернете" .
Я соглашаюсь со многими точками, которые David делает выше, таким образом, я делаю некоторые точки здесь только ради аргумента.
Для хорошо осведомленного пользователя, я утверждал бы, что OpenID [еще 113] безопасная форма аутентификации, чем много веб-сайтов обеспечивают. Теперь позвольте мне создать резервную копию того оператора. Сначала, под чем я подразумеваю хорошо осведомленный пользователь ? Я определил бы того человека как кого-то, кто знает о слабых местах OpenID и кто принимает меры для смягчения их:
Много веб-сайтов не знают, как надежно поддержать пароли пользователя . Действительно хорошая вещь с OpenID состоит в том, что я добираюсь для выбора моего поставщика OpenID, и таким образом уровень аутентификации должен был войти в систему полагающейся стороне. Например, я могу принять решение делегировать аутентификацию к Verisign или Trustbearer - оба из которых обеспечивают намного более сильные методы аутентификации, чем большинство веб-сайтов в сети. Я очень доверял бы организации, которая специализируется на безопасности с моим паролем, чем некоторым случайным веб-сайтом по сети. Таким образом, я спорил бы, что для knowledeable пользователя, OpenID может быть более безопасным, чем каждый веб-сайт, реализовывая их собственную систему аутентификации.
Все, что, будучи сказанным, большинство пользователей не знает о факторах риска, свойственных от OpenID, и не предпримет шаги для снижения рисков.
OpenID действительно добавляет другую сторону к процессу аутентификации, который необходимо рассматривать как доверяемый компонент. Это весьма схоже в том отношении с любым приложением, которое позволяет восстановление учетной записи по электронной почте, но тогда как Ваши электронные письма передаются в открытом тексте, можно принять решение общаться с поставщиками OpenID только по проверенным Подключениям HTTPS.
Обзор раздел Considerations безопасности спецификации.
Для замечательного описания слабых пятен в OpenID и демонстрации того, как хороший поставщик OpenID может дать опыт, это намного более безопасно, чем традиционное легко-phished пароль, см. это короткое видео Kim Cameron от его Блог .
Идентификационных данныхOpenID можно сделать более безопасным, если вы решите игнорировать всех поставщиков OpenID, которые не поддерживают HTTPS
Мне нравится VIP-доступ Verisign, который можно использовать на сайтах, и есть симпатичное маленькое приложение для iPhone, которое позволит вам получить сгенерированный токен, как и secureID