Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Авторизация с помощью куков
Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Здравствуйте! Я немного не понимаю, как работает авторизация с куками.
Вот как я вижу: юзер зашел на сайт, залогинился. Если логин и хэш пароля совпадают с данными базы, то установить ему куку, а потом на всех сценариях писать session_start и проверять, совпадает ли хеш из куки с хешом в базе.
Только я не пойму какой кеш надо вписывать в куку и в базу для сравнения. Там нужна какая-то "соль" - её нужно отдельно хранить или генерировать после каждой успешной авторизации и перезаписывать в куку и в базу? И как это вообще работает? Объясните попроще, пожалста.
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Itan пишет:
Вот как я вижу
ненадо видеть ))
тема избита до немогубольше
гугл
Itan
Отправлено: 17 Августа, 2011 - 16:24:40
Частый гость
Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Да везде по-разному. У меня в одной книге вообще без соли, во второй непонятно. В инете искал, в одном примере постоянная строка хэшируется вместе с логином, во втором - генерируется каждый раз.
Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Я вот вроде все понял, как это работает.
Только непонятно, как реализовать авторизацию, если два юзера используют один аккаунт, например, корпоративный почтовый ящик. В инете не смог найти.
Например человек А залогинился на сайте. Ему в куки ушла строка случайного хэша; эта же строка ушла в базу, чтобы потом был "автологин".
Но если после авторизации человека А, с другого компьютера авторизуется человек Б, то хэш в базе будет перезаписан на новый и отправится ему в куки.
После этого челоек А при переходе на другую страницу автоматически кикается, т.к. у него не совпадает хеш в куках с хешом в базе.
Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011 Откуда: от верблюда)
Помог: 28 раз(а)
Чё вы мутите опять
Зарегился - добавил в базу логин+зашифрованный пароль
Залогинился - в куки добавился логин и зашифрованный пароль
Зашёл на страницу - проверка если логин и пароль из куков есть в базе то всё ок.
иначе попросить залогиниться
----- Всё гениальное - просто
И ещё проще, если ты - индиго
Itan
Отправлено: 18 Августа, 2011 - 13:31:26
Частый гость
Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Дак как-то не хочется передавать хэш пароля в куки. А такая схема как?:
Таблица в БД:
id | login | password | hash | string
Файл salt.php содержит какую-то определенную строку, сделанную заранее.
При регистрации юзера генерируем случайную строку и записываем в string.
Затем после успешной аутентификации подключаем salt.php и делаем хэш(string.salt). И записываем этот хэш в базу в столбец hash. И в куки отправляем хэш.
И на странице, где нужна проверка авторизации делаем так:
подключаем salt.php
берем из базы hash и string.
если хэш(string.salt) != хэшу из кук, то чистим куки и пересылаем юзера на форму логина, иначе показываем нужную инфу.
Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011 Откуда: Днепропетровск
Помог: 28 раз(а)
Itan пишет:
Как такая схема? Или бред параноика?
ну и чего вы добились этим?
точно так же можно было бы генерировать случайную строку, и каждый раз записывать ее в базу и в куки, а потом сверять и перезаписывать.
Itan пишет:
а потом на всех сценариях писать session_start
зачем вам эти пляски с бубном если вы все-равно используете сессии? не проще ли записать все данные о юзере в сессию при авторизации, а потом проверять существование сессии?
----- if(time()>1356048000) die();
Itan
Отправлено: 18 Августа, 2011 - 14:20:35
Частый гость
Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Цитата:
генерировать случайную строку, и каждый раз записывать ее в базу и в куки
Не пойдет. А если 2 человека зайдут по одним логином с разных компьютеров? например, на корпоративную почту. У того, кто первый зашел сравнение строк из кук и базы будет давать false === кик. Так не надо.
Цитата:
не проще ли записать все данные о юзере в сессию
Разве сессии не закрываются после закрытия браузера? Мне нужно, чтобы человек мог находиться под своим логином только 15 минут, а потом ре-логин.
то продолжаем авторизацию, показываем *секретное* содержимое
}else{
запрет на просмотр содержимого, переадресация на логин форму
}
}else{
#Если сессия пустая
Подключаемся к базе, берем хэш пароля
Если хэш из куков совпадает с хэшом в базе, то
устанавливаем сессию с хэшем пароля
}
Как думаете, такая защита сойдет для аутентификации? (Добавление)
Таким образом, если хакер взломает базу, то подставить хэш не сможет, потому что не знает, как он получился. (Правда, он может испортить мою базу, но это ругая тема.)
А от стыривания куков можно сделать привязку к IP - мне все равно нужна авторизация только на 15 минут.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.