Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка сессии
 
 автор: AEFriend   (28.01.2008 в 22:04)   письмо автору
 
 

Здраствуйте. Скажите пожалуйста, нужно ли проверять значения $_SESSION?
Т.е. если человек прошел регистрацию, получил $_SESSION['name'] и $_SESSION['pswrd'], может ли он подделать их?
Спрашиваю потому что код у меня примерно такой:
<?php
$name  
$_SESSION['name'];
$pswrd $_SESSION['pswrd'];
$query "SELECT * FROM authors WHERE name = '".$name."' and pswrd = '".$pswrd."'";
?>

Безопасно ли так делать? А то вдруг можно подделать, тогда получается возможна sql-инъекция.

   
 
 автор: retsoul   (28.01.2008 в 22:05)   письмо автору
 
   для: AEFriend   (28.01.2008 в 22:04)
 

а что Вы сохраняете в $pswrd?
если пароль - то совсем не безопасно

   
 
 автор: AEFriend   (28.01.2008 в 22:10)   письмо автору
 
   для: retsoul   (28.01.2008 в 22:05)
 

Ну должно быть наверное понятно
$pswrd = $_SESSION['pswrd'] // - пароль!

Меня интересует вопрос, можно ли подделать в $_SESSION[любое имя]?
Может кто-либо другой узнать значения сессий?

   
 
 автор: retsoul   (28.01.2008 в 22:16)   письмо автору
 
   для: AEFriend   (28.01.2008 в 22:10)
 

если вы в сессии сохраняете пароль, то эти данные можно попытаться утянуть сниффером или ещё как, а если вы его сохраняете в сессии ещё в открытом виде - то вообще здорово!
подделать сессию возможно можно получив доступ к серверу, но если получить доступ к серверу - то уже можно сотворить, что угодно :)

   
 
 автор: AEFriend   (28.01.2008 в 22:55)   письмо автору
 
   для: retsoul   (28.01.2008 в 22:16)
 

Млин, дак че делать то, как тогда авторизацию проводить? Мне что-то плохо понятно, зачем тогда сессии нужны, если их можно стырить? Просто читал и мне наверное показалось, что сессии нельзя украсть!
Просто первый раз делаю сайт. На сайте есть регистрация. Соответственно есть Вход (аутентификация).
Я решил использовать сессии.
Допустим, человек выполнил вход и получил переменные сессии
$_SESSION['name'];
$_SESSION['pswrd'];

Вот и вопросы у меня такие:
1. Возможно ли подделать значения сессий?
2. Сниффер без проблем сможет утянуть мои сессии?
3. Есть ли еще способы утянуть сессии?
4. Как тогда быть, есть ли способ защитить сессию?
5. Обязательно ли в сессии пароль должен быть не в открытом виде, а всегда его прогонять через md5() или что-то другое? Просто если посмотреть на этот форум (html-код), то он тут в открытом виде!

Посоветуйте пожалуйста что-нибудь. Буду рад, если выложите нормальный код аутентификации, с проверкой имени и пароля.

   
 
 автор: retsoul   (28.01.2008 в 23:30)   письмо автору
 
   для: AEFriend   (28.01.2008 в 22:55)
 

если хотите безопасную регистрацию, то не храните в сессиях имена, а тем более пароли, и хеши тоже лучше не хранить, так как гугл-всему теперь голова ;)

на счёт - этого форума - разговор отдельный :) не берусь ничего утверждать.

если вы хотите сделать надёжную систему, то храните в сессиях идентификаторы и обрабатывайте их скриптами, можно оставить и имя, а вот пароль точно там хранить не стоит :)

Ответы:
1. - Нет ничего невозможного :) - "Только хлопотно это" :)
2. - Не знаю, не проверял, но слышал :) Могу посоветовать прогуглить этот вопрос :)
3. - Смотри вторую часть второго ответа :)
4. - Не хранить в сессии пароли, тем более в открытом виде
5. - В надёжных системах его там быть не должно, хотя бы потому, что в базе данных должен храниться не ключ, а его слепок - хеш, именно по-этому, при восстановлении забытого пароля пользователю генерируют новый пароль. А этот форум - полностью учебный, да ещё разобран по косточкам в книгах, да и тут тоже :)

А вот советы - я не даю ;) Вы сами решите, что Вам подходит больше. Я лишь выссказал свою точку зрения, ИМХО так сказать :)

   
 
 автор: AEFriend   (28.01.2008 в 23:50)   письмо автору
 
   для: retsoul   (28.01.2008 в 23:30)
 

А где тогда хранить пароли? Не могу понять, как тогда большинство веб-ресурсов работает?
Для чего собственно на сайте нужен ВХОД? Для того, чтобы ты зашел, и мог изменять свои настройки, писать сообщения и т.п, и тебе не нужно каждый раз вводить свой логин и пароль. Для этого как раз и используют кукисы или сессии. Вроде бы больше ничего нет? Или есть?

Раз уж retsoul пока только Вы отвечаете мне, можете тогда пояснить, как вы делаете это(вход на сайт)? Наверное это же не военная тайна?
Можете привести какой-нибудь пример(скрипт) или дать какую-нибудь хорошую ссылку?

   
 
 автор: retsoul   (29.01.2008 в 00:10)   письмо автору
 
   для: AEFriend   (28.01.2008 в 23:50)
 

это не секрет :)
и не военная тайна :)
только своих рецептов не покажу, вдруг там большие и белые дыры, ошибки и уязвимости, зачем вам повторять мои ошибки? :))
но рассказать - расскажу :)

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

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

на каждой нужной для защиты страницы у нас должен иметься обработчик проверяющий сессии и наличие в них идентификаторов авторизации

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

а ещё - используйте поиск по форуму, тут много информации по этой теме, есть и готовые скрипты :)

   
 
 автор: ChieFSS   (29.01.2008 в 00:14)   письмо автору
 
   для: AEFriend   (28.01.2008 в 23:50)
 

Почти цитата JIEXA (из статьи на этом форуме "самый оптимальный метод авторизации") :

При регистрации в базу данных записываеться логин пользователя и пароль(в md5 шифровании)
При авторизация, сравниваеться логин и пароль, если они верны, то генерируеться случайная строка, которая хешируеться и добавляеться в БД в соседнюю строку. Также записываеться IP адрес пользователя. В куки пользователя записывается его уникальный индетификатор и сгенерированный hash.

Почему надо хранить в куках хеш случайно сгенерированной строки, а не хеш пароля?
1. Из-за невнимательности программиста, во всей системе могут быть дырки, воспользовавшийсь этими дырками, злоумышленик может вытащить хеш пароля из БД и подставить его в свои куки, тем самым получить доступ к закрытым данным.

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

   
 
 автор: retsoul   (29.01.2008 в 00:18)   письмо автору
 
   для: ChieFSS   (29.01.2008 в 00:14)
 

вопрос :)
в чём отличие сессий от кукисов, кроме того, что первые храняться на сервере, а вторые в браузе пользователя? :)

   
 
 автор: ChieFSS   (29.01.2008 в 00:23)   письмо автору
 
   для: retsoul   (29.01.2008 в 00:18)
 

Сессии работают до закрытия браузера, а куки устанавливаются на определенное количество времени.

А вообще для авторизации лучше использовать и то и другое, потому что куки можно отключить в браузере, а сессии по любому будут работать.

   
 
 автор: retsoul   (29.01.2008 в 00:40)   письмо автору
 
   для: ChieFSS   (29.01.2008 в 00:23)
 

просто вопрос был у него именно про сессии :)

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

   
 
 автор: AEFriend   (29.01.2008 в 08:47)   письмо автору
 
   для: retsoul   (29.01.2008 в 00:40)
 

Прочитал я JIEXA (из статьи на этом форуме "самый оптимальный метод авторизации") - хорошая статья.
Воспользовался этим примером, только переделал на сессии. Всю ночь колдовал, колдовал, вроде добился чего хотел.
Вот только вопрос:
Надо к $_SESSION[ ] относиться так же как к другим переменным, например, $_GET, $_POST?
Т.е. применять к ним, substr(), trim(), empty(), mysql_escape_string() и т.п. Или их подделать сложно?
Вот если взять, допустим 2 таких варианта:
1.
<?php echo $_SESSION['name']; ?>

2.
<?php echo htmlspecialchars(substr($_SESSION['name'], 032)); ?>

То всетаки лучше пользоваться вторым?

   
 
 автор: KPETuH   (29.01.2008 в 08:59)   письмо автору
 
   для: AEFriend   (29.01.2008 в 08:47)
 

если до внесения данных в сессионную перемную вы проверяли их, то думаю 2 строка будет излишней...

   
 
 автор: KPETuH   (29.01.2008 в 09:00)   письмо автору
 
   для: ChieFSS   (29.01.2008 в 00:23)
 

>Сессии работают до закрытия браузера, а куки устанавливаются на определенное количество времени.
>
Сессии тоже могут работать определенное время, а не до закрытия браузера...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования