Что я должен использовать для аутентификации пользователя в PHP? - PullRequest
8 голосов
/ 02 марта 2012

Я думал о написании собственного скрипта аутентификации, но я мало что знаю о безопасности.

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

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

Может кто-нибудь объяснить, как реализовать безопасную аутентификацию?

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

Ответы [ 3 ]

5 голосов
/ 02 марта 2012

Отметьте этот ответ здесь .

Хотя ответу 3 года, предлагаемая библиотека phpass актуальна.

Также+1 к Арону Седерхольму.Защита паролем является обширной темой, и вам следует сначала посмотреть на связанные вопросы, которые уже обсуждались здесь в StackOverflow, чтобы вы лучше познакомились с этой темой и лучшими практиками в области безопасности.

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

5 голосов
/ 02 марта 2012

Что нужно иметь в виду:

  1. Аутентификация;проверка пользователя - это то, кем они себя называют.
  2. Авторизация;обеспечение того, что пользователю разрешено делать то, что он пытается.
  3. Бухгалтерский учет;запись и аудит того, что они делают.

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

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

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

Наконец, связывание всех трех из них - сессия вашего пользователя.Когда вы вызываете 'session_start ()' в PHP, он отправляет клиенту идентификатор сеанса в виде файла cookie и сохраняет файл на жестком диске сервера, содержащий содержимое $_SESSION для этого пользователя.Вы также можете настроить PHP для переопределения функциональности по умолчанию и сохранения данных сеанса, используя session_set_save_handler .Затем вы можете сохранить эту информацию в базе данных.

TL; DR : используйте платформу, такую ​​как CodeIgniter, Drupal, Yii или какое-либо другое активно разработанное решение.Подавляющее большинство фреймворков будет делать все, что вам нужно, и если они этого не делают, их можно очень легко изменить. Не создавайте свой собственный фреймворк для этого;используйте тот, который уже доступен.

1 голос
/ 02 марта 2012

Я использую tank_auth (плагин Codeigniter), который довольно хорош. Исходный код является хорошим справочным материалом для реализации безопасного входа в систему.

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