Безопасный ввод пароля PHP возможно?

Я создавал веб-сайт с нуля, и хотя у меня есть некоторый опыт в программировании (в частности, Python и различные разновидности C), я учу себя html, php, sql и так далее.

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

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

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

2 ответа

Решение

Вы правы настолько, что невозможно защитить транспортировку пароля между клиентом и сервером с помощью собственного приложения. Если злоумышленник может выполнить атаку ManInTheMiddle, он (а) может сделать то же самое, что и ваш клиент, или может просто убрать JavaScript, который пытается зашифровать или хешировать пароль пользователя перед его отправкой.

Поэтому единственное, что вы можете сделать, это использовать зашифрованное соединение SSL/HTTPS. Большинство провайдеров предлагают установить сертификат SSL, но часто это немного дороже, а иногда доступно только в профессиональном комплекте. Есть также хостеры, которые предлагают его бесплатно.

Шифрование соединения SSL работает, потому что уже есть общий секрет. Браузеры установят список корневых сертификатов, и эти сертификаты можно использовать для настройки зашифрованного соединения.

  1. Это самый важный бит: использовать HTTPS.

  2. Вы должны использовать хеш для пароля в javascript перед его отправкой на сервер и использовать только хэшированное значение. Таким образом, фактический пароль получить нелегко. Не забудьте посолить хэш. Смысл хеширования на стороне клиента заключается в том, что он скрывает оригинальный пароль. (Многие пользователи используют один и тот же пароль на нескольких сайтах. Таким образом, трудно получить исходный пароль)

Вот хорошая реализация SHA-256: http://www.movable-type.co.uk/scripts/sha256.html

  1. Снова хешируйте его на стороне сервера, перед тем как сохранить, на случай, если кто-то получит доступ к вашим данным. Не забывай соль.

  2. Помните, что безопасность зависит только от степени:c)

Где вы храните хеш, менее важно. Просто убедитесь, что он недоступен снаружи. Используйте файлы.httpaccess для ограничения доступа. Вот несколько примеров: http://blog.dreamhosters.com/kbase/index.cgi?area=3083

Другие вопросы по тегам