Я недавно начал изучать php и, несмотря на то, что в интернете полно информации, вопрос по реализации надёжной системы авторизации пользователей для меня остаётся открытым. Далее я постараюсь показать как я вижу ситуацию и приведу свои (или не свои) рассуждения на счёт того, что смог найти.
Вот, допустим, я захотел сделать сайт, на котором размещена "стандартная" форма авторизации с использованием php, которая выглядит примерно так:
Главная страница — Страница с формой авторизации — php авторизации — файл с защитой от sql-инъекций — файл подключения к БД MySQL — в случае если всё ок, то в куки записывается логин + сгенерированный и сохраненный код доступа.
- Стандартно в настройках доступ к БД - только из localhost
- Используется SSL
Какие меры защиты я нашёл и хочу использовать
- Логин и пароль хэшируются. Это кажется безопасным способом хранения данных, особенно если утечёт чисто база. Но это не защищает от MiitM, так как хэширование происходит на стороне сервера. Реализовывать хэширование на стороне клиента смысла мало, потому что тогда хэш становится паролем и "читающему" данные между клиентом и сервером по большому счёту всё равно хэш это или пароль в чистом виде. (ну или можно использовать хэширование на обеих сторонах).
- php с защитой от sql-инъекций (хотя это можно прописать и в .htaccess)
- Всё, начиная с php авторизации, защищено от прямого доступа через .htaccess. На самом деле это очень полезный файл, в который можно прописать многое
Конечно, если база данных не содержит ничего, кроме id, хэшированных логина и пароля, и у сайта не предусмотрено администрирование , то в таком случае
безопасностью можно вообще пренебречь описанного выше достаточно.
Но, во-первых, мне до сих пор не попался на глаза сайт, где авторизация была бы реализована на чистом php (почему их нет, если всё так "легко"?, или я просто не внимательный?). Во-вторых, очень хочется прокачать свои знания и навыки в этой теме (поэтому буду благодарен, если напишете в комментариях в какую сторону по части безопасности копать), и в третьих, требования к безопасности постоянно усложняются, поэтому, если задумаюсь сделать серьёзный проект, такие знания очень пригодятся.
Собственно вопрос в том, насколько оправданно применять всё это в таком виде, какие важные моменты я упустил и что ещё мне следует поискать по этой теме?