Как бы вы реализовали аутентификацию на основе FORM без базы данных?

У меня есть PHP-скрипт, который запускается как CGI-программа, а HTTP- Authenticateзаголовок съедается и выплевывается. Поэтому я хотел бы реализовать некоторую аутентификацию на основе ФОРМ. В качестве дополнительного ограничения база данных отсутствует, поэтому данные сеанса не могут быть сохранены.

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

Так как бы вы это реализовали?

Печенье?

Я мог бы представить форму, и если она будет подтверждена, я могу отправить обратно cookie, который является хешем IP-адреса и секретным кодом. Тогда я могу предотвратить рендеринг страниц, если вещь не расшифровывается правильно. Но я понятия не имею, как реализовать это в PHP.

20.08.2008 03:27:08
Вы должны повторно использовать существующую структуру аутентификации всякий раз, когда это возможно, потому что, на самом деле, это сложно. Например, взгляните на github.com/delight-im/PHP-Auth. Это можно использовать с SQLite в качестве минимального резервного хранилища данных. Если вам действительно не нужна база данных, попробуйте HTTP Basic Auth или сохраните ваши пользовательские данные в виде простого файла. Но я не вижу причин, по которым вы не сможете использовать SQLite или что-то еще.
caw 21.09.2016 03:50:58
4 ОТВЕТА
РЕШЕНИЕ

Несколько способов сделать это.

  1. htaccess - ваш веб-сервер обрабатывает защищенные страницы (хотя не совсем на основе cgi-формы).
  2. Используйте куки-файлы и какой-то алгоритм хеширования (достаточно md5) для хранения паролей в плоском файле, где каждая строка в файле имеет имя пользователя: passwordhash. Обязательно засолите свои хэши для дополнительной безопасности против радужных таблиц. (Этот метод немного наивен ... будьте очень осторожны с безопасностью, если вы идете по этому пути)
  3. использовать что-то вроде базы данных sqlite только для обработки аутентификации. Sqlite достаточно компактен и прост, поэтому может по-прежнему отвечать вашим потребностям, даже если вы не хотите использовать большой бд-бэнд.

Теоретически вы также можете хранить данные сеанса в плоском файле, даже если у вас нет базы данных.

5
20.08.2008 04:43:15

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

-1
20.08.2008 04:44:37

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

Быстрый поиск в Google по php htpasswd показывает эту страницу с функцией PHP для проверки учетных данных по htpasswd. Вы можете интегрировать его (при условии, что у вас есть сеансы, настроенные на автозапуск) с таким кодом:

// At the top of your 'private' page(s):
if($_SESSION['authenticated'] !== TRUE) {
    header('Location: /login.php');
    die();
}

// the target of the POST form from login.php
if(http_authenticate($_POST['username'], $_POST['password']))
    $_SESSION['authenticated'] = TRUE;
1
24.08.2019 16:08:46

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

Вы действительно должны видеть заголовок Авторизация, если веб-сервер позаботится о контроле доступа за вас?

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

Удачи, :)

1
20.09.2008 21:44:16