Безопасна ли эта система входа? - PullRequest
4 голосов
/ 13 декабря 2010

Мне просто интересно, насколько эта система входа безопасна, потому что я планировал использовать ее в качестве инструмента обучения. Я не хочу использовать то, что научит меня неправильному пути. Кто-нибудь может помочь?

https://github.com/ivannovak/jpmaster77-s-Login-System-

Ответы [ 4 ]

5 голосов
/ 13 декабря 2010

Некоторые моменты, которые вы можете рассмотреть:

1) Использует ли он шифрование md5 или sha1 (лучше sha1).

2) Используется ли соление или нет?

3) Обеспечивает ли доступ только https?(в идеале страница логина / пароля http: // должна перенаправляться на https: // версию).

4) Как работает забытый пароль?Ссылка для сброса пароля в идеале должна отправляться на зарегистрированный идентификатор электронной почты, а не быть доступной непосредственно онлайн.Если есть какие-то встроенные вопросы безопасности - достаточно ли они жесткие?Правильно ли зашифрованы ответы на секретный вопрос?

regards,

JP

5 голосов
/ 13 декабря 2010

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

PS: Я также не думаю, что вы должны изучать этот материал (если вы хотите изучать спецификации / библиотеки openid, но оставьте это экспертам по безопасности. Вы должны использовать openid / facebook connect / etc. Я использую rpxnow. ком с большим удовольствием.

Старая кодовая база

Первый код базы является старым. Последний коммит August 11, 2009. Я бы посмотрел на систему логинов, которая более поддерживается (новее). Например, он не использует более новый / безопасный PDO для доступа к вашей базе данных. Я также нахожу кодовую базу немного грязной. нет MVC?

SSL

Не уверен, поддерживает ли эта кодовая база SSL. Если нет, то ваши пароли будут переданы в виде простого текста.

Mysql Injection

Этот код может быть небезопасен из-за внедрения MySQL =>
https://github.com/ivannovak/jpmaster77-s-Login-System-/blob/master/mail.php#L118

$q = "SELECT * FROM mail WHERE UserTo = '$user' ORDER BY SentDate DESC";

Если session->username был подтвержден (не просмотрел все ссылки), то ваша система небезопасна. Приличная (современная) система использует PDO.

Без соли

Я не верю, что система использует соль, поэтому с Радужной таблицей все пароли могут быть обнаружены при взломе вашей базы данных. =>
https://github.com/ivannovak/jpmaster77-s-Login-System-/blob/master/include/session.php#L157

$result = $database->confirmUserPass($subuser, md5($subpass));

Другие вещи, которые вы должны учитывать

  • CSRF
  • XSS-атаки

локальный

Также это странная строка (не небезопасная) =>
https://github.com/ivannovak/jpmaster77-s-Login-System-/blob/master/include/mailer.php#L34
Вы не можете связаться с localhost из Интернета.

3 голосов
/ 13 декабря 2010

Глядя на ваш код, кажется, что вы храните имя пользователя и идентификатор пользователя в 3 местах: сеанс (вполне нормально, но подвержен перехвату сеанса в зависимости от вашего сервера) и 2 куки (выглядит очень неправильно, так как имя пользователя уже составляет половину работа, проделанная для компрометации системы.

  • пароль не засолен, что облегчает угадывание пароля.
  • имя пользователя проверяется с базой данных перед очисткой (запомните таблицу Бобби, xkcd)
  • никогда не доверяйте addlash или любой волшебной функции цитат, используйте заполнители для передачи переменных в запрос (всегда !!!!)
  • Любое изменение пользовательской таблицы вне цели администратора - плохо (с точки зрения безопасности, потому что вы не можете разделить dbusers для другой цели) (с точки зрения производительности, потому что я знаю, что написание таблицы требует блокировки таблицы или строки, если вам повезет)
  • Выполните запрос на чтение и обновление, желательно с разными пользователями.
  • старайтесь не использовать код, в котором комментарий говорит вам, где классная часть, любой здравомыслящий кодер не помещал бы подобные вещи в свой комментарий.
  • слой базы данных имеет одну функцию для проверки имени пользователя + идентификатор пользователя, но в сеансе include выполняется прямой запрос для проверки имени пользователя в функции входа в систему?

Мой совет - использовать что-то еще.

2 голосов
/ 13 декабря 2010

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

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

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

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

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