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

Форум PHP

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

 

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

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

тема: Продолжение дискуссии об авторизации
 
 автор: PhMaster   (23.10.2009 в 15:00)   письмо автору
 
 

Ребята, посетила одна мысль.
Хотелось бы написать скрипт, который в случаи успешной авторизации юзера добавлял бы его в табличку session(session_id, putdate, ip_session,agent,randomA,randomB)
То есть юзер зарегистрировался и в табличку добавился его SID и два рандмайз числа(их сохраним в сессии юзера). И далее прикручиваем скрипт следующего содержания к каждой страничке: если в таблице session юзер с сессиоными данными(рандомны числа + SID) имеется уже то обновляем его время на страничке. А далее строку запроса на удаление юзверей с момента регистрации которых прошло больше 10 минут.

Trianon, cheops, посетители как вам такой подход ?
Увеличит ли он безопасность ?

  Ответить  
 
 автор: psychomc   (23.10.2009 в 15:04)   письмо автору
 
   для: PhMaster   (23.10.2009 в 15:00)
 

я так понял это будет скрипт просто дял просмотра пользователей онлайн.
>и два рандмайз числа(их сохраним в сессии юзера)
это по-моему вообще бред какой-то. может лучше сохранить ip и браузер?
не понимаю причем здесь безопасность

  Ответить  
 
 автор: PhMaster   (23.10.2009 в 16:48)   письмо автору
 
   для: psychomc   (23.10.2009 в 15:04)
 

Да видимо я что-то поторопился. А что значит браузер, это агент что ли ? Не подскажите как агент проверять на идентичность сессии весь $_SERVER['HTTP_AGENT'] или что-то вырезать в строке агента ?

  Ответить  
 
 автор: psychomc   (23.10.2009 в 17:46)   письмо автору
 
   для: PhMaster   (23.10.2009 в 16:48)
 

да, оно самое. ничего не надо вырезать. просто в принципе можно на страницах кроме ip проверять и это. а вообще, я делал универсальный идентификатор вроде такого:
md5($_SERVER["REMOTE_ADDR"].$_SERVER["HTTP_AGENT"])
и потом по нему проверял тот ли это пользователь

(никому ничего не навязываю)

  Ответить  
 
 автор: PhMaster   (24.10.2009 в 13:17)   письмо автору
 
   для: psychomc   (23.10.2009 в 17:46)
 

То есть вы так же как и я, в сессии сохраняете данную конъюнкцию ? А потом проверяете ?
md5($_SERVER["REMOTE_ADDR"].$_SERVER["HTTP_AGENT"])

  Ответить  
 
 автор: Trianon   (24.10.2009 в 13:19)   письмо автору
 
   для: PhMaster   (24.10.2009 в 13:17)
 

что такое конъюнкция?

  Ответить  
 
 автор: PhMaster   (24.10.2009 в 16:02)   письмо автору
 
   для: Trianon   (24.10.2009 в 13:19)
 

md5($_SERVER["REMOTE_ADDR"].$_SERVER["HTTP_AGENT"])


Конъюнкция - это эквивалент логического и. В данном контексте я имел ввиду конъюнкцию ip-адреса клиента и его агента.

  Ответить  
 
 автор: Trianon   (23.10.2009 в 15:05)   письмо автору
 
   для: PhMaster   (23.10.2009 в 15:00)
 

нет

  Ответить  
 
 автор: jackson05   (23.10.2009 в 20:21)   письмо автору
 
   для: PhMaster   (23.10.2009 в 15:00)
 

по поводу безопасности. Написал такой код в index.php:
<?php
session_start
();
if(!isset(
$logged_user))
$logged_user="гость";
session_register("logged_user");?>

потом в адресной сторке пишу index.php?logged_user=xXx - заходит на страничку все равно как гость. так что думаю по поводу безопасности париться не стоит

  Ответить  
 
 автор: durable   (23.10.2009 в 22:15)   письмо автору
 
   для: jackson05   (23.10.2009 в 20:21)
 

jackson05 Я видимо чего то не допонимаю, как говоря о безопасности можно приводить такой код?
А если я введу такой URL: www.site.ru/index.php?logged_user=admin ???

  Ответить  
 
 автор: jackson05   (24.10.2009 в 12:10)   письмо автору
 
   для: durable   (23.10.2009 в 22:15)
 

Читал статью, как страшно использование сессий при авторизации, типа методом гет можно передать ей значение существующего имени, и войти вот так просто без пароля....была приведена куча скрипта, как очистить строку от лишнего, как запретить доступ к странице, если запрос извне (т.е. не со страницы своего сайта) и т.д. Перепугавшись, стал пробовать... ничего не получилось подставляя в строку имя переменной.
Хотя может под безопасностью я понимаю не общепринятое явление. Собсна я только как месяц начал програмить

  Ответить  
 
 автор: psychomc   (24.10.2009 в 12:25)   письмо автору
 
   для: jackson05   (24.10.2009 в 12:10)
 

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

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 12:38)   письмо автору
 
   для: psychomc   (24.10.2009 в 12:25)
 

Я думаю, имелось в виду, что ломают не сессии, а используют дырки, оставленные программером, юзавшим сессии.

  Ответить  
 
 автор: jackson05   (24.10.2009 в 12:44)   письмо автору
 
   для: psychomc   (24.10.2009 в 12:25)
 

http://www.getinfo.ru/article250.html

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 12:51)   письмо автору
 
   для: jackson05   (24.10.2009 в 12:44)
 

Вы статью до конца дочитали? Там внизу дополнение от 2001 года!!
Во-первых, дополнение очень дельное
Во-вторых, я вообще поражаюсь, откуда вы это нарыли. Статье уже около 10ти лет, а вы по ней учитесь..Ну удачи вам, удачи.

  Ответить  
 
 автор: jackson05   (24.10.2009 в 12:54)   письмо автору
 
   для: neadekvat   (24.10.2009 в 12:51)
 

))) обратил после того как использовал... все работало, вот и пока ничего не менял

  Ответить  
 
 автор: Valick   (23.10.2009 в 23:53)   письмо автору
 
   для: jackson05   (23.10.2009 в 20:21)
 

Ваш код вообще ни о чём. Даже теряюсь, что бы Вам такого посоветовать почитать.

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 11:54)   письмо автору
 
   для: jackson05   (23.10.2009 в 20:21)
 

Расскажите, пожалуйста, что делает ваш код. Построчно прокомментируйте.

  Ответить  
 
 автор: jackson05   (24.10.2009 в 12:03)   письмо автору
 
   для: neadekvat   (24.10.2009 в 11:54)
 

стартуем сессию, проверяем задана ли в сессии переменная юзера, если нет - присваиваем ей значение гость (появится приветствие "привет, гость"). В случае авторизации , направляемся на эту страницу, опять проверка, теперь переменная задана (пусть бдует админ), и появится приветствие "привет, админ"

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 12:17)   письмо автору
 
   для: jackson05   (24.10.2009 в 12:03)
 

Что-то я не вижу тут суперглобальных переменных, н-р, $_SESSION. register_globals должны быть off.
Соответственно, т.к. надо использовать $_SESSION, session_register() можно смело убирать.

И потом. Я могу просто стащить кукисы у админа и буду админом, т.к. никаких проверок пользователя не ведется вообще.

Это то же самое, что я встану на протоптанную тропинку в лесу и не буду пускать никого, кто идет по этой тропинке. Только ленивый не придет к простому решению - обойти меня. Ведь там я не трогаю.
Так же и у вас в коде.

На самом деле я должен стоять с автоматом и не пускать никого, прямо он идет, или обходит за км.

  Ответить  
 
 автор: jackson05   (24.10.2009 в 12:50)   письмо автору
 
   для: neadekvat   (24.10.2009 в 12:17)
 

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

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 12:56)   письмо автору
 
   для: jackson05   (24.10.2009 в 12:50)
 

Гугл в помощь
Сейчас в интернете масса статей, где рассказывается про register_globals, сессии и тп..

  Ответить  
 
 автор: jackson05   (24.10.2009 в 13:16)   письмо автору
 
   для: neadekvat   (24.10.2009 в 12:56)
 

проверил register_globals, включено...
Но, используя свой код, так и не могу добиться что б при отправке через гет переменной, зарегить ее в сессии.... В чем прикол?

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 13:22)   письмо автору
 
   для: jackson05   (24.10.2009 в 13:16)
 

> проверил register_globals, включено...
А должно быть выключено.

> не могу добиться что б при отправке через гет переменной, зарегить ее в сессии
<?php
session_start
();
$_SESSION['value'] = $_GET['value'];

Естесственно, это только пример. Все данные, которые приходят от пользователя, надо проверять и обрабатывать.

  Ответить  
 
 автор: jackson05   (24.10.2009 в 14:05)   письмо автору
 
   для: neadekvat   (24.10.2009 в 13:22)
 

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

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 14:37)   письмо автору
 
   для: jackson05   (24.10.2009 в 14:05)
 

Уж не знаю, знаете ли вы английский, но logged user переводится (с учетом интернет-сленга) как авторизовавшийся пользователь.
Переменные обычно имеют имя, соответствующее тому, что сама переменная в себе хранит. Многие такие переменные одинаковы в разных скриптах, даже написанных разными людьми.

Но суть не в этом, а в том, что "register_globals = on" опасно не только для данного скрипта, но и для работоспособности многих частей сайта в принципе

А лично ваш скрипт не подходит потому (и это я уже объяснял), что не ведется никакой провекри подлинности пользователя, т.е. что ключ серверу дает уже совсем другой человек - мошенник.

Это то же самое, что (где-то пример видел), если на военной базе дежурному будет известно - придет человек по имени Андрей в зеленой форме и скажет пароль "Ракета", а приходит Вася в красном спортивном костюме и говорит "Ракета", при этом поминутно оглядываюсь и не смотря в глаза. Я не пропущу Васю. А вы со своим скриптом еще и чаю предложите.

  Ответить  
 
 автор: jackson05   (24.10.2009 в 16:38)   письмо автору
 
   для: neadekvat   (24.10.2009 в 14:37)
 

А что мешает обозвать logged_user к примеру банальной а?
Хорошо, под проверкой подлинности что понимается ввиду? последний айпи? Дома один, на работе другой... или пускать только из дому, а зайдя с работы юзер обломается?
Да и пока что речь не в проверке, зная и переменную и видя код не получается передать ей значение... опять вопрос - почему?

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 17:00)   письмо автору
 
   для: jackson05   (24.10.2009 в 16:38)
 

> А что мешает обозвать logged_user к примеру банальной а?
Называйте.
Потом веселый код получится у вас:
<?php
$a 
$b $c;
$d trim($e);
$f mysql_real_escape_string($g);

Очень понятный и информативный

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

> Да и пока что речь не в проверке, зная и переменную и видя код не получается передать ей значение... опять вопрос - почему?
Не понял вопроса

  Ответить  
 
 автор: jackson05   (24.10.2009 в 18:07)   письмо автору
 
   для: neadekvat   (24.10.2009 в 17:00)
 

<?php 
session_start
(); 
if(!isset(
$logged_user)) 
$logged_user="гость"
session_register("logged_user");?>

Вот такой код в начале index.php. Потом хтмл теги выводят "Привет, <? echo "$logged user"; ?>".
Теперь сам вопрос. Пишу в браузере 127.0.0.1/index.php?logged_user=admin. Но подстановка не происходит, выводится "гость". Почему? Надо уточнить что если войти из под формы авторизации (которая перенаправляет на index.php) - все работает как надо, появляется приветствие "Привет, admin".
З.ы. не дорос до базы данных, все пишу через файлы

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 18:09)   письмо автору
 
   для: jackson05   (24.10.2009 в 18:07)
 

Видимо, register_globals = off

  Ответить  
 
 автор: jackson05   (24.10.2009 в 18:14)   письмо автору
 
   для: neadekvat   (24.10.2009 в 18:09)
 

:( говорю же включено, проверял

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 18:24)   письмо автору
 
   для: jackson05   (24.10.2009 в 18:14)
 

Вы так говорите, будто то, что это включено - хорошо.
Выключайте и переписывайте ваш скрипт.
Прочитайте про суперглобальные переменные.

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 18:24)   письмо автору
 
   для: jackson05   (24.10.2009 в 18:14)
 

.

  Ответить  
 
 автор: jackson05   (24.10.2009 в 20:20)   письмо автору
 
   для: neadekvat   (24.10.2009 в 18:24)
 

покажусь назойливым, но использовать новое только изза того, что оно новое... и вразумительного ответа я так и не получил, чем опасен включенный register_global(); ведь все примеры подразумевают известное имя регистрируемой в сессии переменной.

  Ответить  
 
 автор: neadekvat   (24.10.2009 в 20:56)   письмо автору
 
   для: jackson05   (24.10.2009 в 20:20)
 

http://freshcoder.ru/archives/351
Ну, почитайте тут.

Но помните, что разрабатывая скрипты с включенным register_global(), вы роете себе яму, ибо разработав масштабный сайт и залив его на хостинг, вы можете быть неприятно удивлены..

  Ответить  
 
 автор: jackson05   (30.10.2009 в 21:57)   письмо автору
 
   для: neadekvat   (24.10.2009 в 20:56)
 

спустя неделю получил ответ на вопрос "почему не происходила подстановка при таком вводе mysite/index.php?logged-user=admin" в коде
<?php 
session_start
(); 
if(!isset(
$logged_user)) 
$logged_user="гость"
session_register("logged_user");?>

Дело в том, что сначала заходил на начальную страницу (сессия естесно уже регистрировалась), а потом уж пытался подменить имя пользователя.
счас немного поправил код:
<?php
unset($logged_user);
session_start();
session_register($logged_user);
if(!isset($logged_user))
$logged_user="гость";
session_register("logged_user");?>
Теперь подстановка не происходит

  Ответить  
 
 автор: Trianon   (31.10.2009 в 00:42)   письмо автору
 
   для: jackson05   (30.10.2009 в 21:57)
 

[поправлено модератором]

  Ответить  
Rambler's Top100
вверх

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