Эта тема на forum.dklab.ru


BoFFiN: Форма и Cookie
Например есть форма(ник, пароль), как сделать так чтобы при первом
вводе данных информация записывалась в Куки, и при последущем заходе этого, пользователя
Либо уже форма была заполнена, либо выводились данные введенные пользователем раньше?
Только не нужно отсылать в поиск, про функцию SetCookie читал, проблема состоит в
её практическом применение...
P.S. Если есть ссылки на примеры с функцией SetCookie просьба кинуть.
DmitriyPopov:
BoFFiN:
Если есть ссылки на примеры с функцией SetCookie просьба кинуть
Да без проблем!!!
http://www.php.net/manual/
Юрий Насретдинов:
При большом желании можно даже использовать javascript (функцию setcookie я приводить не буду)


<form onsubmit="setcookie('login',login.value,999999999)">
<input type=text name=login value='переменная PHP $_COOKIE["login"]''>
</form>


Либо вот полностью рабочий скрипт:


<?
if(!isset($GET['login']))
{
?>
<form action="<?=$_SERVER['PHP_SELF']?>">
<input type=text name=login value="<?=@$_COOKIE['login']?>">
<input type=submit value='войти'>
</form>
<?
}else
{
@setcookie('login',$_GET['login'],time()+99999999,'/');
if($_GET['login']=="yUAC") echo "Вы успешно вошли в систему";
else echo "Логин должен быть 'yUAC' !!!";
}
?>


Вот так-то...
BoFFiN:
Дмитрий Попов

Там пример всего один, и то слишком сложный...

А как насчет ответа на вопрос?
DmitriyPopov:
Какой ответ? На какой вопрос?

Вы конкретное что то спросите?

Вас интересует, как работает ф-ция setcookie? Так по той сслыке, которую я дал, и это узнаете - она универсальная...

Если знаете - то я не понимаю вопроса!
Ложите в куку логин, пароль, при следующем заходе проверяете, есть ли такая кука, если есть, то выводите её. Что непонятного?
BoFFiN:
yUAC

Во.. спасибо... :)
Только тут if(!isset($GET['login'])) опечатлся ты немножко, про нижнию черточку забыл перед GET

Вообще работает как часы, вставляет в поле логин, информацию из Куки, с этим разобрался..

А как насчет того, чтобы при заходе на страницу, ему сразу ввыводился его Логин, а форма не показывалась вовсе, и чтобы можно было нажать "Выйти" или что-то типа того, и форма снова появлялась.....

Дмитрий Попов
Спасибо... Мне нужно было, что ЯЦ написал...
Юрий Насретдинов:
Мне нужно было, что ЯЦ написал...

Не надо каверкать мой ник !!! Он называется ЮАК !!!
BoFFiN:
yUAC
Сорри... :)) yUAC аля ЮАК
Запомнил на всю жизнь.. :)
Объясни хотя бы принцип работы: "А как насчет того, чтобы при заходе на страницу, ему сразу ввыводился его Логин, а форма не показывалась вовсе, и чтобы можно было нажать "Выйти" или что-то типа того, и форма снова появлялась..... "
плз
Евгений Бондарев:
BoFFiN:
Не тормози!
При логине выставляешь специальную куку. А потом при следующих заходах смотришь - если такая кука есть, то форму не выводишь.
Секьюрности в этом методе мало...
Лучше в куку писать и логин и пароль, но куку могут спереть...
BoFFiN:
<?
$password="rem";
if(!isset($button)) {
?>
<form action="<?=$_SERVER['PHP_SELF']?> " method="post">
<input name="pass" type="text" value="<?=@$_COOKIE['pass']?>">
<input name="button" type="submit" value="Send">
</form>

<?
if($_COOKIE['pass']==$password)
Header("Location: cook3.php?pass=rem&button=Send");
else echo "";
} else {

@setcookie("pass", $_POST['pass'], time()+500, "/");
if($pass==$password) echo "Вы авторизованы";
else echo "Вы не авторизованы, для авторизации введите $password";
}
?>

Я вот так сделал, это правильно? тут есть ошибки?


Евгений Бондарев
Постараюсь.. :))
Я вот выше написал, только я там не вставлял спец.куку, я имеющуюся проверил..
Объясни чем опасен этот скрипт? В чем нарушается безопасность?
Лучше в куку писать и логин и пароль, но куку могут спереть...

Как могут спереть? Только если она относиться к этому серверу, тогда какой смысл её забирать...
Евгений Бондарев:
BoFFiN:
Ох...
какой смысл её забирать...
Как какой? Ты залогинился и имеешь доступ к какой-то информации. Я спер у тебя куку и записал подсунул данные из нее твоему скрипту, который проглотил это и посчитал меня "залогинившимся тобой".

тут есть ошибки?
Я не особо понял смысл этого скрипта...

В чем нарушается безопасность?
Например ты в куке хранишь идентификатор залогиненого пользователя. Или, как было раньше у phpBB, уровень его доступа (юзер, модератор, администратор).
Я зарегистрировался, залогинился под своим именем, потом в куке поменял идентификатор пользователя или уровень доступа....
BoFFiN:
Евгений Бондарев

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


Я не особо понял смысл этого скрипта...

Смысл простой, вводишь Ник если он равен rem то "Вы авторизованы"; Если нет то "Вы не авторизованы, для авторизации введите $password";
При этом устанавливается @setcookie("pass", $_POST['pass'], time()+500, "/");
И при следущем заходе на страницу если if($_COOKIE['pass']==$password) он автоматом идет на Header("Location: cook3.php?pass=rem&button=Send"); иначе ничего не происходит...

Ну вот например, как в ПХПББ я один раз ввёл ник и пароль, и теперь когда я захожу на страницу он автоматом показывает мой ник...
Юрий Насретдинов:
Я молчу и тихо плачу. Зачем залогиниваться еще раз, если просто можно учитывать, что кука есть и пароль верный ???
BoFFiN:
yUAC

Так как же тогда по другому?
Лучше Header'a ничего не придумал...
Подскажи..
WingedFox:
BoFFiN:
А для Вас не секрет, что информация идет от Вас до сервера по _десяткам_ компьютеров, где она может быть элементарно перехвачена?

Если хочется так в открытую хранить логин и пароль, то начните изучать SSL, пока не поздно.

А header тут и даром не нужен.
DmitriyPopov:
Если хочется так в открытую хранить логин и пароль, то начните изучать SSL, пока не поздно.
Вы сами-то думаете, что советуете?

Человек еще ни PHP ни MySQL аболютно не знает, а Вы его уже в SSI погнали. Убивать за такие советы надо :) ....
BoFFiN:
WingedFox

:))) Ну хорошо, буду хранить с использованием функции md5(); :)

А header тут и даром не нужен.
Так млин, объясните же!!! Как сделать по другому!

Дмитрий Попов
Сохраняем спокойствие... :))
WingedFox:
Дмитрий Попов:
Я знаю, что делаю =)

При этом он либо останется жить и станет программистом, либо - почувствует глубокое отвращение к этому занятию и перестанет мучаться неразрешимыми вопросами %)

BoFFiN:
Что будете хранить в виде md5()???

В общем так:
Раз уж так сильно хочется наступить на грабли...
Просто подключаете к каждому скрипту, который должен быть защищен паролем, другой скрипт, который проверяет авторизованность пользователя. Если в куке логин и пароль правильные - продолжаете работу.
Иначе - показываете форму для регистрации.
Получается простейшая конструкция if..then..else.
Евгений Бондарев:
В общем смотрите сами: http://xpoint.ru/cgi-bin/forum.cgi?action=thread&id=21652
BoFFiN:
WingedFox


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

Если хочется так в открытую хранить логин и пароль, то начните изучать SSL, пока не поздно.
Ребята, я не собираюсь разрабытывать систему безопасности Пентагона,
поэтому объяснять какой опасный нынче инет, смысла нет!
По-моему почти все форумы, чаты и т.п. работают без всяких
систем криптографий.


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


В общем так:
Раз уж так сильно хочется наступить на грабли...
Просто подключаете к каждому скрипту, который должен быть защищен паролем, другой скрипт, который проверяет авторизованность пользователя. Если в куке логин и пароль правильные - продолжаете работу.
Иначе - показываете форму для регистрации.

А чем это отличается от того скрипта который я написал? Вся проблема в реализации!!! Чем можно заменить Header()?


Евгений Бондарев
В общем смотрите сами: http://xpoint.ru/cgi-bin/forum.cgi?action=thread&id=21652
Давид Мзареулян:
« Значит, человечество ещё не решило эту задачу... »
Человечество не решило другую задачу - безопасного хранения данных (в данном случае кук) на компе пользователя. Если бы куку было бы сложнее перенести на другой комп или подсмотреть, что в ней есть, проблем было бы меньше.

Опять таки к моему вопросу, отношения мало имеет!


Я задал, один простой вопрос, а тут такую дискусию развели!



WingedFox и Дмитрий Попов

По-моему SSI и SSL немножко разные вещи.. :)) если имеется SSI - server side include то с ним немножко знаком, но пока не очень понимаю как это вяжеться к нашей теме. Как я понимаю SSI - это набор команд, позволяющий включить в страницу информацию, недоступную средствами HTML.
Если имеется ввиду SSL - Secure Sockets Layer — протокол, защищащающий данные, пересылаемые между Web-браузерами и Web-серверами, то мне кажеться это больше к разработчикам программного обеспечения подходит.
Что значит: "Изучать SSL" вроде это не язык программирования, или тут имелось ввиду такое же изучение как протокола TCP/IP, HTTP и т.д.
WingedFox:
SSL, который Secure Socket Layer.
Вот только с его помощью и можно обезопасить пересылаемые данные.

А скрипты на PHP это не П/О? =)
Или Вы - не разработчик? =)

header можно заменить на include, например. Или - на require. Или - на readfile(). Или еще на что-нибудь, что не будет пинать пользователя.
BoFFiN:
WingedFox

Ну чтоже вы батенька, тогда на форуме этом делаете, ведь перехватят, как пить дать, перехватят ваш логин и пароль! :))

А скрипты на PHP это не П/О? =)
Я имеел ввиду, что я не разрабатывал пхп, не разрабатывал так же ОС, браузеры , в которых вообще может не быть поддержки, и не администрирую, большую половину серверов в инете....
В пхп есть раздел SSL, который я могу изучить?

header можно заменить на include, например. Или - на require. Или - на readfile(). Или еще на что-нибудь, что не будет пинать пользователя.
Чем тут может помочь include или require? Всего один файл, что во что ты предлагаешь инклудить?
WingedFox:
BoFFiN:
Как это что? На личном примере показываю, какую люди глупость делают, приходя на форум =)
А еще - старательно не храню информацию о логине и пароле в куках =)

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

RTFM.
LXXI. OpenSSL functions
Все остальное - в больших, толстых и умных книгах.
Ну и на http://www.openssl.org/ , конечно.

Почему один?
include_once $_GET['page'].".php";
Юрий Насретдинов:
include_once $_GET['page'].".php";

А еще лучше unlink($_SERVER['QUERY_STRING']); ;)
BoFFiN:
WingedFox

Занавес, аплодисменты, бис!
Оставим эту тему про SSL.

Теперь по существу...

Почему один?
include_once $_GET['page'].".php";
Один, потому что мой выше указанный скрипт, всё делает в одном файл, предлагаете инклудить самого себя?
По стараюсь разобраться, можно было чуть-чуть поподробней, так же как и про SSL, кстати чертовых мануалов перечитал немало.

yUAC
unlink($_SERVER['QUERY_STRING']);
Это воспринимать как шутку? :)


P.S. Я вообще специально привел скрипт, чтобы конкретно получить ответ, но получил такую уйму советов, что думаю даже Яндекс с этим не справиться...
DmitriyPopov:
и не администрирую, большую половину серверов в инете...
В этом мы не сомеваемся... :)
Юрий Насретдинов:
Это воспринимать как шутку?
Можете еще вот что попробовать:


echo "бесконечный цикл";
include(__FILE__);


BoFFiN:

Если Вы действительно хотите инклудить файл с название страницы, то НУЖНО сделать так:


include_once(intval($_GET['page']).'.php');


Угадайте, почему... Особенно если ввести в строке браузера что-то типа "index.php?page=index" ;)
Дмитрий Котеров:
Развели тут оффтопик без меня, понимаешь... (-;
WingedFox:
BoFFiN:

По существу:

Quote:

Почему один?
include_once $_GET['page'].".php";


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

Я говорю про другую схему:
Есть скрипт, проверяющий авторизацию. Назовем оригинально - auth.php
Есть страница для ввода паролЯ - пусть будет login.php
Есть несколько страниц, защищенных паролем: page1.php, page2.php, ..., pageN.pnp

Алгоритм простой:
1. передаем auth.php?page=page1
2. в auth.php проверяем куку на предмет логина,
a. ее нет - показываем login.php
b. она есть и валидна - идем дальше
3. проверяем права юзера на страницу
а. нету прав - показываем что-нибудь неприличное
б. есть права - идем дальше.
4. выставляем признак логина.
5. инклюдим нужную страницу.

Страницы оборачиваем во что-нить вроде if (isset($login)) {...}
Вот и все. еще можно положить страницы в какой-нить каталог и запретить доступ к нему из веба.
BoFFiN:
yUAC

Если Вы действительно хотите инклудить файл с название страницы, то НУЖНО сделать так:
Код (php):
include_once(intval($_GET['page']).'.php');
Я не хочу ничего не куда инклудить, это предложил WingedFox, так и не объяснив чего куда инклуждить он хотел...

Дмитрий Котеров
Сударь, может хоть вы соизволите ответить на мой вопрос?
BoFFiN:
WingedFox

Я говорю про другую схему:
Есть скрипт, проверяющий авторизацию. Назовем оригинально - auth.php
Есть страница для ввода паролЯ - пусть будет login.php
Есть несколько страниц, защищенных паролем: page1.php, page2.php, ..., pageN.pnp

Эту схему я сам могу без проблем реализовать, мне интересно было, как сделать это всё в одном файле...
Евгений Бондарев:
Страницы оборачиваем во что-нить вроде if (isset($login)) {...}
Вот и все. еще можно положить страницы в какой-нить каталог и запретить доступ к нему из веба.
Угу. Потом включаем глобалсы и ходим по всем страницам требующим авторизацию таким образом: auth.php?page=page1&login=hacker

Молодец!
BoFFiN:
Евгений Бондарев

Точно, он еще и с точки зрения не безопасен... А вы тут о высших материях говорите(SSL)...

Не хочу обидеть гуру, но создается впечатления, что вы либо не хотите помогать нормально, либо сами ни черта не знаете....
WingedFox:
Угу. Потом включаем глобалсы и ходим по всем страницам требующим авторизацию таким образом: auth.php?page=page1&login=hacker

Молодец!

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

Кроме того:
еще можно положить страницы в какой-нить каталог и запретить доступ к нему из веба.

Точно, он еще и с точки зрения не безопасен... А вы тут о высших материях говорите(SSL)...

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

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

А что вы хотите от гуру? Они за вас не будут делать всю работу 8*)
DmitriyPopov:
Я думаю, не хотят. И правильно. Ибо все о чем Вы говорите, слегка похоже на бред.

Учите мат. часть (с) - Е. Бондарев
WingedFox:
BoFFiN:
Эту схему я сам могу без проблем реализовать, мне интересно было, как сделать это всё в одном файле...

Ладно.
5. рисуем код страницы.
Юрий Насретдинов:
Я думаю, не хотят. И правильно. Ибо все о чем Вы говорите, слегка похоже на бред.

Точно. И по-моему это похоже на бред не "слегка", а "очень даже сильно"... Причем я с трудом вообще могу разобраться в сообщениях и их смысле. Похоже, тема нуждается в закрытии, иначе тут начнется такое...
BoFFiN:
WingedFox

А что вы хотите от гуру? Они за вас не будут делать всю работу 8*)

Ексёль-моксель чего тут делать если знаешь-то?
Мне было интересно можно было весь ваш вышеописанный алгоритм сделать в одном файле, и всё..
ээ..ладно.. забудь те... разбирусь сам..

Дмитрий Попов
Я думаю, не хотят. И правильно. Ибо все о чем Вы говорите, слегка похоже на бред.
Так нужно было сразу и сказать, что такое осуществить не возможно...

Учите мат. часть (с) - Е. Бондарев
и мат.часть тут не при чём...


Всё, всем спасибо.
Евгений Бондарев:
BoFFiN:
Матчасть всегда причем!

Эта тема на forum.dklab.ru