@Hocok_B_KapMaHe

Быстрая авторизация на php?

Добрый день всем.
Сейчас пишу код для аутентификации и авторизации пользователей на сайте на php.

Выглядит оно так:
пользователь вводит логин\пароль, скрипт на сервере дергает базу, запросом выполняется проверка на наличие пользователя & md5( от этого пароля). Если есть такая комбинация логина и md5 от пароля, - значит все ок.

Так вот на странице (в панели управления) есть код работающий черех xmlhttp (ajax)
При каждом таком запросе нужно дергать базу.
Вот в этом и проблема.
Не хочется мучать ее величество такими мелкими проверками на валидность.

Можно ли обойтись БЕЗ базы ?
Нет, классические сессии не предлагать. (Их много, они неправильно очищаются, fs, inode и т.д.)
memcache и прочее дополнительно ПО ради этого тоже ставить не хочется.

Есть вариант.
Сам метод аутентификации не менять, (при логине базу дергать придется)
а вот авторизацию:
возможно ли обойтись только математикой ?

Вот например по алгоритму Диффи-Хеллмана (понимаю как работает генерация секретного ключа, но не понимаю как авторизировать пользователей, оссобенно с общими g, p)

или что-то типа такого :
пользователь обладает паролем (md5) и солью
посылает его на сервер,
сервер на основе вышеописанных данных вычисляет секретное число
secretkey + (login,pass,salt) = some_num
А при авторизации сервер проделывает обратную операцию. Получается таже сессия но без хранения чего-либо на сервере.

Есть ли такие методы ?
Кто либо их применял?
Какие недостатки помимо хранения всего этого в cookie в открытом виде ?
Любые мысли на этот счет ?
Будет ли быстрее, либо postgres не так уж и плох для множества запросов

P.S. Камнями не бросать :)
  • Вопрос задан
  • 2917 просмотров
Пригласить эксперта
Ответы на вопрос 2
Anonym
@Anonym
Программирую немного )
Нет, классические сессии не предлагать

Храните сессии в редисе и не мучайтесь

Есть ли такие методы?

А как вы на сервере отличите два моих запроса? Мне каждый раз вам пароль в открытом виде слать чтоли?

Камнями не бросать :)

Еще как бросать
Ответ написан
Комментировать
ScorpLeX
@ScorpLeX
Обратную операцию тут не сделаешь.
Если я правильно понял, алгоритм примерно такой:
Клиент запрашивает авторизацию имея логин и пароль.
Сервер проверяет если такой логин\пароль и генерирует на основе зашитой в скрипт secretkey некий хэш md5(secretkey + login + pass) и его отдает клиенту.
Клиент опять конектится на сервер имея еще и хэш, сервер делает md5(secretkey + login + pass) и сравнивает с присланным от клиента хэшем.
Если правильно, считает что он авторизован.

Тут конечно узкое место это зашитый secretkey, узнав который можно залогинится под любым пользователем. Подобрать его будет просто, но нужно знать логин\пароль\хэш\алгоритм.

PS используйте лучше базу, если не доверяете сессиям. И в куках лучше хранить токен, сгенерированный при авторизации пользователя и сверять с ним.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы