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

Привет, я делаю это впервые. Я прочитал полное руководство по аутентификации веб-сайтов на основе форм и http://en.wikibooks.org/wiki/PHP_Programming/User_login_systems,, но у меня все еще есть сомнения относительно того, правильно ли я это делаю. Примечание: я делаю это для изучения, поэтому, пожалуйста, не предлагайте framework и php pear auth или любой другой связанный класс. Мне просто нужно несколько советов о том, что я могу сделать, чтобы улучшить это.

Мне не нужна безопасность в стиле ЦРУ, просто что-то базовое для входа на сайт:

Во всяком случае, так работает мой логин:

  1. Подождите, пока пользователь нажмет кнопку «Войти»

    if (isset ($ _ POST ['action']) && $ _POST ['action'] == 'Login')

  2. Соответствует ли токен формы токену, сохраненному в сеансе? Если не умрете.

  3. Использование php-фильтров для проверки строки в имени пользователя и пароле
  4. Хэш-пароль (sha256) (с солью, я использую одну и ту же соль для каждого пароля)
  5. Используйте mysqli для проверки имени пользователя и хэшированного пароля (LIMIT 1 в SQL).
  6. Если совпадений не найдено, выведите ошибку - в противном случае установите сеанс (хешируется с помощью sha256)

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

 if
 (!isset($_SESSION['authenticated'])) {
     require_once 'html/login_form.html';  
     exit();   }
 // secret stuff goes here

Полный код можно найти здесь . Это все еще неполный .

Я также попытаюсь реализовать это: Как я могу ограничить попытки входа пользователя в PHP .

Я благодарен за любые отзывы.

Ответы [ 2 ]

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

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

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

Номер 5: Не забывайте об SQL-инъекциях.Гораздо важнее, чем LIMIT 1.Проверить mysql_real_escape_string()

1 голос
/ 18 декабря 2010

Во-первых, ничто не на 100% безопасно. Чтобы сделать ваш логин более безопасным, вы можете добавить следующее:

  1. Ответ на вызов - http://en.wikipedia.org/wiki/Challenge-response_authentication
  2. Трехпроходный протокол - http://en.wikipedia.org/wiki/Three-pass_protocol
  3. Хэш-комбинация имени пользователя и пароля md5(password + salt + username)
  4. Используйте JavaScript для проверки на клиенте, а затем повторите проверку на сервере
  5. Использование библиотеки абстракций базы данных для защиты от внедрения SQL.

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

Мой брокерский счет использует фотографии и задания еще до того, как они попадают в форму входа. Это боль (необходима в брокерской учетной записи), но, вероятно, не так много в блоге.

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