CanVas
@CanVas
Веб-мастер

Какие есть статьи про сессии на php которым можно доверять?

Я новичок в php. Гуглил авторизацию\регистрацию на php.
Нашёл вот эту статью на хабре.
Всё просто и понятно, работает и безопасно. Но мне нужна почти такая же статья только с реализацией авторизации на сессиях.
Да, есть гугл - он ничего не дал. А то что дал - везде в комментах пишут про тонну дыр. Мне нужен безопасный способ.
Да, есть документация по php где всё тоже понятно расписано, но нет ни одного полноценного примера реализации авторизации и регистрации на сайте. Я конечно мог бы попытаться с помощью справочника написать свою форму - но 1. боюсь что наделаю ещё больше дыр чем в любом примере что я нашёл, и 2. - я лучше понимаю на примерах. Простой код с комментариями и ничем лишним отлично подойдёт.
  • Вопрос задан
  • 2710 просмотров
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Авторизация на сессиях ничем не отличается от авторизации на куках, за исключением того, сессия сама генерирует хэш и ставит куку.

Поэтому если ты считаешь, что этот код работает безопасно, то просто замени установку и проверку куки на установку и проверку сессионной переменной.
Ответ написан
Комментировать
Вот пара занимательных статей на эту тему:
blgo.ru/blog/2014/07/18/regform
blgo.ru/blog/2014/07/24/regform-112

А вообще, алгоритм примерно такой:
Врубаем https, при регистрации хэшируем пароль с солью и статичиским ключиком. Примерно так:
$staticKey = "Your static key";
$salt = %random string with diggits%; 
$password = sha1($_POST['password'] . $staticKey . $salt);
// save to db $salt and $password

Для авторизации проверяем соответствие пароля:
$staticKey = "Your static key";
$salt = %salt from db%; 
$password = sha1($_POST['password'] . $staticKey . $salt);
return $password == $dbPassword; // Авторизация удалась

Теперь можем создать сессию и записать в нее данные для авторизации. Если исользуем свой механизм сессий, то тут можно предусмотреть несколько вариантов для защиты:
1. Повторный ввод пароля, если пользователь зашел из необычного места (определяем по ip/геолокации, например). Сегодня он в России, завтра он в Австралии, стоит проверить пароль еще раз. Проверку не проходит, скидываем сессию.
2. Сессия была в одном браузере, затем, та же сессия, в другом. Странное поведение, просим ввести пасс.
3. Можем раз в пол часа обновлять идентификатор сессии в куках у юзера.
4. etc.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы