PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (31): В начало « ... 23 24 25 26 27 [28] 29 30 31 »

> Найдено сообщений: 463
Prizma Отправлено: 02 Июля, 2012 - 19:45:47 • Тема: Возможность включения и отключения сеанса с двух разных мест • Форум: Программирование на PHP

Ответов: 22
Просмотров: 1337
Мелкий пишет:

Уууу, батенька. Т.е. вас совершенно не смущает, что определение и использование переменной находятся во взаимоисключающих блоках условия?
согласен) напортачил) в моём изначальном коде был ещё один блок я из него часть запихнул в else счас поправлю)
armancho7777777 пишет:
... просто ужас.
тебе кавычки не нравятся? прости привык использовать одинарные и символ экранизации... нечего не поделаешь (слышал что одинарыные работают быстрее двойных т.к. не идёт проверка на наличие переменных так и приучился использовать одинарные) или ужас в чем то другом?
(Добавление)
поправил код... в первом посте
Мелкий пишет:
Уууу, батенька.
какое там) просто пхп нравится появилась идея вот не поленился "озвучить", критику послушать
(Добавление)
Напомню что я конкретно этот код не тестил, я его получил упрощением своего кода, в моём коде немного другая концепция с доступом, поэтому эта переменная и вылезла...
всёравно не понял вот этого:
EuGen пишет:
Код никак не решает проблемы
EuGen пишет:
(да, впрочем, её не сможет решить никакой код)

(Добавление)
В моём рабочем примере происходит вот что(проверено могу залить на хост продемонстрировать):
1. Авторизируешься
2. Обновляешь страницу (без отправки пост данных) меняется кука и идентификатор в базе данных
3. заходишь с другого браузера авторизируешься
4. обновляешь страничку в первом браузере авторизация слетает т.к. кука изменилась и записалась уже в другом браузере

И что тут не возможного??????
Prizma Отправлено: 02 Июля, 2012 - 19:26:06 • Тема: Возможность включения и отключения сеанса с двух разных мест • Форум: Программирование на PHP

Ответов: 22
Просмотров: 1337
Мелкий пишет:

Кроме неинициализированной переменной - могло бы иметь место на жизнь, если бы не остальной код. А так - именно здесь вы открываете настежь дверь для всех.
стоп стоп стоп где неинициализированная переменная? $sess:
PHP:
скопировать код в буфер обмена
  1. $zapros = 'SELECT id, sess FROM `users` WHERE login =\''.$_POST['login'].'\' and password=\''.$_POST['password'].'\';'; # запрос в таблицу users на соответствие логина и пароля
  2.                $zapros = mysql_query($zapros);
  3.                 if(mysql_num_rows($zapros)>0){ # проверяем выдал ли нам что нибудь запрос
  4.                        while($row = mysql_fetch_array($zapros)){
  5.                                 $login_id = $row['id']; # извлекаем id из предыдущего запроса
  6.                                $sess = $row['sess']; # извлекаем настройки пользователя
  7.                        }

ЗЫ: я обсолютно поддерживаю критику, но пожалуйста больше конкретики, я не против доработать код если он имеет смысл... Мне ж самому интересно найти минусы кода и варианты его возможного усовершенствования как относительно скорости работы так и защиты
Prizma Отправлено: 02 Июля, 2012 - 19:08:59 • Тема: Возможность включения и отключения сеанса с двух разных мест • Форум: Программирование на PHP

Ответов: 22
Просмотров: 1337
Мелкий пишет:
Да здравствуют SQL-инъекции! Если вы думаете, что их нет - ищите лучше. Огромная эксплуатируемая дыра и в таком ответственном коде.

Да здравствуют нотайсы. Включите вывод ошибок.
код для показания как использовать, по сути вот эта часть основная...
PHP:
скопировать код в буфер обмена
  1. if($sess){ # проверяем включен ли параметр
  2.                                $random_value = md5(uniqid(rand(),1)); # создаем новую рандомную переменную
  3.                                $life = 60; # определяем для неё жизнь
  4.                                $zap = 'UPDATE `EXAMPLE`.`coocie` SET `name` = \''.$random_value.'\', `date` = \''.time().'\', `life` = \''.$life.'\' WHERE `coocie`.`login` =\''.$login_id.'\';'; # Запрос на обновление данных о сессии
  5.                                mysql_query($zap);
  6.                                 setcookie('session_coocie', $random_value, time()+$life, '/'); # обновление куки
  7.                        }
в этом куске есть ошибки?

код я могу переписать если смысл имеет, я прост не уверен что эта статья будет кого то интересовать Улыбка я написал в общих чертах принцип
Prizma Отправлено: 02 Июля, 2012 - 18:59:30 • Тема: Возможность включения и отключения сеанса с двух разных мест • Форум: Программирование на PHP

Ответов: 22
Просмотров: 1337
ты не прав... при авторизации с другого места кука изменится тоесть при переходе с первоначальной авторизацией авторизация слетит... не понял почему ты сказал что код проблемы не решает... так же появилась идея что можно изменить немного концепцию что бы каждый раз не менять куку можно менять куку только при авторизации (хотя это понизит уровень безопасности) тогда при получение пост данных куки данные изменятся и тот кто авторизировался раньше вылетит...

аргументируй почему это невозможно и код не работает... если ты имеешь ввиду то что как кто то зашел на сайт под твоим аком другому пользователю без переходов тут же вылетел eror это не так... но при переходе на другую страницу пользователь вернётся к авторизации если сраница заблокирована для гостей (ну или на главную от настроек сайта зависит)
(Добавление)
Тип авторизации: куки

я не использую сессии... та тема на которую ты меня отправил рассматривает именно сессии... мне сессии не нравятся я пользуюсь куками как переменными сообщаемыми в браузер пользователя и только.
Prizma Отправлено: 02 Июля, 2012 - 18:25:22 • Тема: Post данные • Форум: Вопросы новичков

Ответов: 15
Просмотров: 507
дело в том что если 2 человека попытаются заюзать один акаунт один сразу же вылетит) решил по этому поводу даже статью написать)) http://forum.php.su/topic.php?fo...35&topic=785 мне показалось что 2 маленьких запроса в бд не создадут нагрузки
Prizma Отправлено: 02 Июля, 2012 - 18:17:40 • Тема: Возможность включения и отключения сеанса с двух разных мест • Форум: Программирование на PHP

Ответов: 22
Просмотров: 1337
Суть идеи: У вас есть сайт на котором есть авторизация, я предлагаю добавить в меню пользователя функцию которая будет давать возможность запретить 2 сеанса с разных мест поясняю: допустим на ваш сайт зашел человек под ником Вася, а потом кто то попытался зайти за Васю из другого места(не с того браузера с которого зашел Вася)...

итог такого захода: За Васю сидят с разных мест, а Вася даже не подозревает об этом...

что будет в этой статье: Здесь я расскажу как сделать так что бы когда за Васю заходят 2 человека (то есть авторизирутся под его логином и паролем) тот кто был раньше вылетал из сессии...

Пути достижения:
При авторизации создаётся кука, и каждый раз когда Вася переходит с одной страницы сайта на другую эта кука меняется (естественно только в том случае если у пользователя включена эта функция);

ну а теперь самое главное код(хотя идея наверно важнее Хорошо ):


предпологается что раз у вас есть пользователи значит у вас настроено ЧПУ допустим все запросы обрабатывает файл index.php, к которуму уже подключен коннект к базе данных. Форма авторизации находится в login.php, куки хранятся в таблице coocie: id(int), login(id), name(warchar), date(int), life(int)
поясняю:
login - id пользователя
name - уникальный идентификатор coocie
date - время создания куки из функции time()
life - время жизни куки(в секундах)

Так же есть таблица с пользователями пусть будет users: id, login(warchar), password(warchar), sess(int)
поясняю:
sess - это наша функция (соотвественно 1 - включено, 0 - выключено)
остальное думаю очевидно

ах да чуть не забыл база данных называется EXAMPLE

И так все запросы вашего сайта перенаправляются в файл index.php там мы добавляем (напрямую или include) вот такой код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. if((strlen($_POST['login'])>0)and(strlen($_POST['password'])>0)){ #login и password - имя формы от которой приходят запросы(можете менять под себя)
  4.         if((preg_match('#^[0-9a-zA-Zа-яА-я]{3,25}$#', $_POST['login']))and(preg_match('#^[0-9a-zA-Z]{3,25}$#', $_POST['password']))){ # проверка логина и пароля на соответсвие(можете менять под себя)
  5.                 $zapros = 'SELECT id, sess FROM `users` WHERE login =\''.$_POST['login'].'\' and password=\''.$_POST['password'].'\';'; # запрос в таблицу users на соответствие логина и пароля
  6.                 $zapros = mysql_query($zapros);
  7.                 if(mysql_num_rows($zapros)>0){ # проверяем выдал ли нам что нибудь запрос
  8.                         while($row = mysql_fetch_array($zapros)){
  9.                                 $login_id = $row['id']; # извлекаем id из предыдущего запроса
  10.                         }
  11.                         $zapros = 'DELETE FROM `EXAMPLE`.`coocie` WHERE `coocie`.`login` = \''.$login_id.'\';'; # удаляем старые записи
  12.                         mysql_query($zapros);
  13.                         $random_value = md5(uniqid(rand(),1)); # создаем новую уникальную переменную для куки
  14.                         $life = 60; # определяем время жизни куки в секундах (в данном случае 60 секунд)
  15.                         $zapros = 'INSERT INTO `EXAMPLE`.`coocie` (`id` ,`login` ,`name` ,`date` ,`life`) VALUES (NULL, \''.$login_id.'\', \''.$random_value.'\', \''.time().'\', \''.$life.'\');'; # образуем в таблице coocie нашу строку с авторизацией
  16.                         mysql_query($zapros);
  17.                         setcookie('session_coocie', $random_value, time()+$life, '/'); # c этой же авторизацией создаём куку у пользователя
  18.                         $autorization = true;
  19.                         }
  20.         }else{
  21.                 $main = 'Неверный логин или пароль';
  22.                 $autorization = false;
  23.         }
  24. }elseif(isset($_COOKIE['session_coocie'])){ # если пост данных не поступило значит проверяем есть ли у пользователя куки-данные
  25.         $zapros = 'SELECT login, date, life FROM `coocie` WHERE name=\''.$_COOKIE['session_coocie'].'\';'; # если они есть сравниваем их с данными в нашей бд
  26.         $zapros = mysql_query($zapros);
  27.         if(mysql_num_rows($zapros)>0){ # проверяем вернул ли нам запрос что-нибудь
  28.                 while($row=mysql_fetch_array($zapros)){ # если вернул разбираем запрос
  29.                         $login_id = $row['login'];
  30.                         $date = $row['date'];
  31.                         $life = $row['life'];
  32.                 }
  33.                 if(($date)<(time()+$life)){ # проверяем не устарела ли кука
  34.                         $zapros = 'SELECT sess FROM `users` WHERE id =\''.$login_id.'\';'; # запрос в таблицу users получающий данные о настройках сессии
  35.                         $zapros = mysql_query($zapros);
  36.                         if(mysql_num_rows($zapros)>0){ # проверяем выдал ли нам что нибудь запрос
  37.                                 while($row = mysql_fetch_array($zapros)){
  38.                                         $sess = $row['sess']; # извлекаем настройки пользователя
  39.                                 }
  40.                         }
  41.                         if($sess){ # проверяем включен ли параметр
  42.                                 $random_value = md5(uniqid(rand(),1)); # создаем новую рандомную переменную
  43.                                 $life = 60; # определяем для неё жизнь
  44.                                 $zap = 'UPDATE `EXAMPLE`.`coocie` SET `name` = \''.$random_value.'\', `date` = \''.time().'\', `life` = \''.$life.'\' WHERE `coocie`.`login` =\''.$login_id.'\';'; # Запрос на обновление данных о сессии
  45.                                 mysql_query($zap);
  46.                                 setcookie('session_coocie', $random_value, time()+$life, '/'); # обновление куки
  47.                         }
  48.                 $autorization = true;                  
  49.                 }
  50.         }else{ # если время жизни истекло раньше
  51.                 $autorization = false;
  52.                 $main = 'Пожалуйста авторизируйтесь снова!';
  53.         }
  54. }else{ # если не было найдено не пост не куки данных
  55.         $autorization = false;
  56. }
  57. ?>
  58.  


ЗЫ: расписал всё как мог подробно, строго не судите первая моя статья)
ЗЗЫ: делал пример из своего кода, максимально пытался сократить и оставить только самое главное
(Добавление)
И конечно забыл добавить т.к. кука меняется каждый раз при просмотре страниц сайта один из пользователей под одним аком будет вылетать
Prizma Отправлено: 02 Июля, 2012 - 16:37:03 • Тема: Post данные • Форум: Вопросы новичков

Ответов: 15
Просмотров: 507
up
Prizma Отправлено: 02 Июля, 2012 - 15:21:00 • Тема: Несуществующий запрос в mySQL выдает true • Форум: Если скрипт не работает

Ответов: 4
Просмотров: 1479
окей попробуемс
(Добавление)
отлично всё работает) пасиб
ток теперь другая ошибка в другом месте с этой функцией
PHP:
скопировать код в буфер обмена
  1. if(($access)and(isset($login_id))){
  2.         $zapros = 'SELECT login, group FROM `fir_users` WHERE id =\''.$login_id.'\';';
  3.         $zapros = mysql_query($zapros);
  4.         if(mysql_num_rows($zapros)>0){ # 52 строка
  5.                 while($row = mysql_fetch_array($zapros)){
  6.                 $login = $row['login'];
  7.                 $dostup = $row['group'];
  8.                 }

error
CODE (htmlphp):
скопировать код в буфер обмена
  1. Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in Z:\home\warcraft-maps\www\function\uri\admin.php on line 52

(Добавление)
блин туплю нашел ошибку запрос не правильный над было его дополнить
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT fir_users.login, fir_users.GROUP
  2. FROM `fir_users`
  3. WHERE id = '1'

(Добавление)
похоже он не правильно воспринимал слово group
Prizma Отправлено: 02 Июля, 2012 - 15:13:51 • Тема: Несуществующий запрос в mySQL выдает true • Форум: Если скрипт не работает

Ответов: 4
Просмотров: 1479
Обсолютно при любых значениях логина и пароля скрипт идёт по этой ветке Недовольство, огорчение(

разве при $zapros же должен выдавать FALSE (только не в таком формате)
PHP:
скопировать код в буфер обмена
  1.         $zapros = 'SELECT id FROM `fir_users` WHERE login =\''.$_POST['login'].'\' and password=\''.$_POST['password'].'\';';
  2.         $zapros = mysql_query($zapros);
  3.         if($zapros){ # делает этот кусок кода почему???
  4.          }else{# а должен делать этот :((((
  5.         }
Prizma Отправлено: 02 Июля, 2012 - 13:34:41 • Тема: Регулярные выражения • Форум: Если скрипт не работает

Ответов: 2
Просмотров: 950
ооой) и вправду ...

вот сообщение Warning: preg_match() expects at least 2 parameters, 1 given in Z:\home\warcraft-maps\www\function\uri\admin.php on line 2

как раз про это и ругался похоже
спасибо
Prizma Отправлено: 02 Июля, 2012 - 13:01:04 • Тема: Регулярные выражения • Форум: Если скрипт не работает

Ответов: 2
Просмотров: 950
ругается на прег матч Недовольство, огорчение
сначало пробывал так:
PHP:
скопировать код в буфер обмена
  1. if((isset($_POST['login']))and(isset($_POST['password']))and(preg_match('#^[0-9a-zA-Zа-яА-я_-]{3,25}$#', $_POST['login']))and(preg_match('#^[0-9a-zA-Z_-]{3,25}$#')))

потом добавил экраниорвание:
PHP:
скопировать код в буфер обмена
  1. if((isset($_POST['login']))and(isset($_POST['password']))and(preg_match('#^[0-9a-zA-Zа-яА-я\_\-]{3,25}$#', $_POST['login']))and(preg_match('#^[0-9a-zA-Z\_\-]{3,25}$#')))


опять что то с регулярными не так сделал Растерялся
Prizma Отправлено: 02 Июля, 2012 - 12:28:10 • Тема: Post данные • Форум: Вопросы новичков

Ответов: 15
Просмотров: 507
вчера спать ушел... спасибо за ответы

Мне нужно именно достичь того что бы воткнуть ожидание 5 секунд для невозможности подбора паролей, я хотел это ограничить в самой пост форме но теперь понимаю что глупо это... надо в скрипт ввести проверку данных откуда пришел запрос... выше мне предложили ip

И ещё один вопрос, для безопасности(копирования куков) при каждой загрузке страницы старая кука стирается а новая записывается с другим идентификатором и в бд тоже информация обновляется. это не будет сильно затормаживать работу?(всего 2-3 коротких запросов в mySQL и перезапись куки)
Prizma Отправлено: 01 Июля, 2012 - 21:20:10 • Тема: Post данные • Форум: Вопросы новичков

Ответов: 15
Просмотров: 507
Можно ли как нибудь проверить с какой страницы пришли пост данные хочется как-то защитить авторизацию...варианты кроме $_SERVER['HTTP_REFERER'] есть? а то я так понял что эту переменную не сложно подделать при желании... что нибудь по надёжней бы
Prizma Отправлено: 01 Июля, 2012 - 21:17:59 • Тема: Как сохранить название скачиваемого файла • Форум: Вопросы новичков

Ответов: 9
Просмотров: 402
я ж сказал что проблема пока возникла только с пробелами при замене на тире всё ок думаю с нижней чертой тоже врятле будут проблемы ладно пофиг потом решу эту проблему
Prizma Отправлено: 01 Июля, 2012 - 20:00:09 • Тема: создание куки • Форум: Вопросы новичков

Ответов: 2
Просмотров: 133
спасибо большое премного благодарен

Страниц (31): В начало « ... 23 24 25 26 27 [28] 29 30 31 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB