это будет работать как альтернатива http cookie? - PullRequest
1 голос
/ 14 июля 2010

Я использую php для своего сайта, и мне было интересно, стоит ли использовать $ _SERVER md5 ($ _ SERVER ['remote_addr'] + $ _SERVER ['http_user_agent'])) в поле cookie_auth в пользовательской таблице.

Когда пользователь входит в систему, php будет использовать указанный выше ключ, чтобы повторно проверить текущего пользователя и сравнить его с сохраненным ключом, и, если он совпадает, получить кредиты для пользователя.

Проблемы в том, что пользовательский агент может измениться, и IP может измениться. Я думаю, что моя главная проблема - пользовательский пользовательский агент. IP-адреса обычно остаются в течение месяца или двух, и у моей основной базы пользователей есть статические IP-адреса (компании), поэтому это не должно быть проблемой.

Существуют ли другие переменные php $ _SERVER, которые я мог бы объединить, которые были бы менее изменчивыми ... но все же динамичными?

У меня есть руководство по php, но я не вижу ничего полезного ... Может быть, я что-то упустил.

Реализуют ли другие разработчики что-нибудь подобное?

Мысли

Есть ли лучший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 14 июля 2010

Это не сработает, в том числе из-за прокси. Если два человека с одним и тем же пользовательским агентом посещают, то это катастрофа.

Некоторые проекты могут выполнять «сеансы без cookie», передавая идентификатор сеанса в переменную GET во всех URL-адресах, которые они используют.

PHP действительно может сделать это самостоятельно. И вы даже можете заставить PHP вообще не использовать куки , просто передать его в переменные GET.

Но есть некоторые недостатки. Если вы вызываете URL-адреса вашего приложения в своем коде JavaScript, вы должны вставить туда идентификатор сеанса. Кроме того, при наличии внешних ссылок идентификатор сеанса можно сделать доступным через параметр HTTP referer (sic) для третьих сторон, что может привести к возможному краже сеанса. Вы должны быть особенно осторожны с отверстиями XSS. Вы, вероятно, должны быть осторожны с фиксацией сеанса во время процедуры входа в приложение. И так далее.

1 голос
/ 14 июля 2010

моя основная база пользователей имеет статические IP-адреса (компании)

Итак, если кто-то в MegaCorp (со всеми одинаковыми браузерами и с одним и тем же внешним IP-адресом) входит в систему, все ли в нем вошли? Не делай этого.

И еще одна причина: все айфоны в одной области (один и тот же прокси-сервер, один и тот же браузер) вошли в систему. Все, что мне нужно сделать, чтобы взломать, это просто быть в пределах нескольких сотен метров (в некоторых километрах) до кого-то с доступом, и это автоматически предоставлено мне.

Как правило, существует 2 способа иметь «пароль без логина» (именно отсюда и возникает большинство этих вопросов):

  • Файлы cookie с достаточным количеством «неосуществимых хешей» от предыдущего входа в систему
  • Убедите пользователя установить сертификат, который вы можете проверить по HTTPS.
0 голосов
/ 14 июля 2010

Большинство переменных $_SERVER контролируются злоумышленником (remote_addr извлекается непосредственно из сокета tcp и не может быть подделан или подделан каким-либо другим способом).Однако злоумышленник может изменить пользовательский агент на что угодно.

Не переизобретайте волю.session_start() и $_SESSION super-global безопасны, просты в реализации и надежны.Чтобы использовать это, вы всегда должны вызывать session_start() в заголовочном файле для всех страниц.

if(!$_SESSION[logged_in]){
    header("location: login.php");
    die();//Yes php keeps executing so you need this!
}

затем в login.php:

if(login($_REQUEST[user],$_REQUEST[password])){
    $_SESSION[logged_in]=true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...