Уууу, батенька. Т.е. вас совершенно не смущает, что определение и использование переменной находятся во взаимоисключающих блоках условия?
согласен) напортачил) в моём изначальном коде был ещё один блок я из него часть запихнул в else счас поправлю)
armancho7777777 пишет:
... просто ужас.
тебе кавычки не нравятся? прости привык использовать одинарные и символ экранизации... нечего не поделаешь (слышал что одинарыные работают быстрее двойных т.к. не идёт проверка на наличие переменных так и приучился использовать одинарные) или ужас в чем то другом? (Добавление)
поправил код... в первом посте
Мелкий пишет:
Уууу, батенька.
какое там) просто пхп нравится появилась идея вот не поленился "озвучить", критику послушать (Добавление)
Напомню что я конкретно этот код не тестил, я его получил упрощением своего кода, в моём коде немного другая концепция с доступом, поэтому эта переменная и вылезла...
всёравно не понял вот этого:
EuGen пишет:
Код никак не решает проблемы
EuGen пишет:
(да, впрочем, её не сможет решить никакой код)
(Добавление)
В моём рабочем примере происходит вот что(проверено могу залить на хост продемонстрировать):
1. Авторизируешься
2. Обновляешь страницу (без отправки пост данных) меняется кука и идентификатор в базе данных
3. заходишь с другого браузера авторизируешься
4. обновляешь страничку в первом браузере авторизация слетает т.к. кука изменилась и записалась уже в другом браузере
Кроме неинициализированной переменной - могло бы иметь место на жизнь, если бы не остальной код. А так - именно здесь вы открываете настежь дверь для всех.
стоп стоп стоп где неинициализированная переменная? $sess:
$zapros='SELECT id, sess FROM `users` WHERE login =\''.$_POST['login'].'\' and password=\''.$_POST['password'].'\';';# запрос в таблицу users на соответствие логина и пароля
ЗЫ: я обсолютно поддерживаю критику, но пожалуйста больше конкретики, я не против доработать код если он имеет смысл... Мне ж самому интересно найти минусы кода и варианты его возможного усовершенствования как относительно скорости работы так и защиты
$random_value=md5(uniqid(rand(),1));# создаем новую рандомную переменную
$life=60;# определяем для неё жизнь
$zap='UPDATE `EXAMPLE`.`coocie` SET `name` = \''.$random_value.'\', `date` = \''.time().'\', `life` = \''.$life.'\' WHERE `coocie`.`login` =\''.$login_id.'\';';# Запрос на обновление данных о сессии
ты не прав... при авторизации с другого места кука изменится тоесть при переходе с первоначальной авторизацией авторизация слетит... не понял почему ты сказал что код проблемы не решает... так же появилась идея что можно изменить немного концепцию что бы каждый раз не менять куку можно менять куку только при авторизации (хотя это понизит уровень безопасности) тогда при получение пост данных куки данные изменятся и тот кто авторизировался раньше вылетит...
аргументируй почему это невозможно и код не работает... если ты имеешь ввиду то что как кто то зашел на сайт под твоим аком другому пользователю без переходов тут же вылетел eror это не так... но при переходе на другую страницу пользователь вернётся к авторизации если сраница заблокирована для гостей (ну или на главную от настроек сайта зависит) (Добавление)
Тип авторизации: куки
я не использую сессии... та тема на которую ты меня отправил рассматривает именно сессии... мне сессии не нравятся я пользуюсь куками как переменными сообщаемыми в браузер пользователя и только.
дело в том что если 2 человека попытаются заюзать один акаунт один сразу же вылетит) решил по этому поводу даже статью написать)) http://forum.php.su/topic.php?fo...35&topic=785 мне показалось что 2 маленьких запроса в бд не создадут нагрузки
Суть идеи: У вас есть сайт на котором есть авторизация, я предлагаю добавить в меню пользователя функцию которая будет давать возможность запретить 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) вот такой код:
if((strlen($_POST['login'])>0)and(strlen($_POST['password'])>0)){#login и password - имя формы от которой приходят запросы(можете менять под себя)
if((preg_match('#^[0-9a-zA-Zа-яА-я]{3,25}$#',$_POST['login']))and(preg_match('#^[0-9a-zA-Z]{3,25}$#',$_POST['password']))){# проверка логина и пароля на соответсвие(можете менять под себя)
$zapros='SELECT id, sess FROM `users` WHERE login =\''.$_POST['login'].'\' and password=\''.$_POST['password'].'\';';# запрос в таблицу users на соответствие логина и пароля
$random_value=md5(uniqid(rand(),1));# создаем новую рандомную переменную
$life=60;# определяем для неё жизнь
$zap='UPDATE `EXAMPLE`.`coocie` SET `name` = \''.$random_value.'\', `date` = \''.time().'\', `life` = \''.$life.'\' WHERE `coocie`.`login` =\''.$login_id.'\';';# Запрос на обновление данных о сессии
}else{# если не было найдено не пост не куки данных
$autorization=false;
}
?>
ЗЫ: расписал всё как мог подробно, строго не судите первая моя статья)
ЗЗЫ: делал пример из своего кода, максимально пытался сократить и оставить только самое главное (Добавление)
И конечно забыл добавить т.к. кука меняется каждый раз при просмотре страниц сайта один из пользователей под одним аком будет вылетать
Мне нужно именно достичь того что бы воткнуть ожидание 5 секунд для невозможности подбора паролей, я хотел это ограничить в самой пост форме но теперь понимаю что глупо это... надо в скрипт ввести проверку данных откуда пришел запрос... выше мне предложили ip
И ещё один вопрос, для безопасности(копирования куков) при каждой загрузке страницы старая кука стирается а новая записывается с другим идентификатором и в бд тоже информация обновляется. это не будет сильно затормаживать работу?(всего 2-3 коротких запросов в mySQL и перезапись куки)
Можно ли как нибудь проверить с какой страницы пришли пост данные хочется как-то защитить авторизацию...варианты кроме $_SERVER['HTTP_REFERER'] есть? а то я так понял что эту переменную не сложно подделать при желании... что нибудь по надёжней бы
я ж сказал что проблема пока возникла только с пробелами при замене на тире всё ок думаю с нижней чертой тоже врятле будут проблемы ладно пофиг потом решу эту проблему