Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2010, 22:57   #1
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию авторизация, с самого начала

Расскажите мне, как новичку, про авторизацию. Прочитал, что есть переменные:
$_SESSION['user'],
$_SESSION['password'],
которые должны хранить данные о пользователе, а как их использовать? Без всяких наворотов для защиты, я уже пробовал что-то повторить из выложеного в нете, но не получиось, и не разобрался.
Krasi вне форума Ответить с цитированием
Старый 12.07.2010, 23:48   #2
spein
Программист
Форумчанин
 
Аватар для spein
 
Регистрация: 27.02.2009
Сообщений: 505
По умолчанию

Конкретнее поставь вопрос)
there are no limits when you're software engineer
spein вне форума Ответить с цитированием
Старый 13.07.2010, 10:40   #3
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Нужно совсем с нуля написать авторизацию. Раньше пользовался готовыми скриптами и слабо осознавал, что происходит. Ну, например, начать с того, чтобы залогиниться (в бд уже создана учетная запись с паролем, ником и возможностью записи ip, ну то-есть для самого простого варианта), а потом при заходе пользователем на страницу он распознался, как пользователь (например, if login->hi cool fellow user). Ну с куками я принцип чуть-чуть понял, ну и по скриптам помню: set cokee & get cokee. А вот что за переменные на стороне сервера? Ну и как любым способом реализовать самую простую авторизацию и как потом методом серверной переменной распознавать, что пользователь зареген?
Krasi вне форума Ответить с цитированием
Старый 13.07.2010, 10:46   #4
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Цитата:
Сообщение от Krasi Посмотреть сообщение
Расскажите мне, как новичку, про авторизацию. Прочитал, что есть переменные:
$_SESSION['user'],
$_SESSION['password'],
которые должны хранить данные о пользователе, а как их использовать? Без всяких наворотов для защиты, я уже пробовал что-то повторить из выложеного в нете, но не получиось, и не разобрался.
вводит юзер логин и пароль , если в базе такая комбинация есть, то аторизуешь его(если без наовротов то просто иницилизируещь переменную $_SESSION['user']), дальше во всех скриптах проверяешь эту переменную , если все ОК то один вариант работы скрипта ,если нет то другой вариант работы скрипта
ssdm вне форума Ответить с цитированием
Старый 13.07.2010, 10:53   #5
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Цитата:
Сообщение от Krasi Посмотреть сообщение
Нужно совсем с нуля написать авторизацию. Раньше пользовался готовыми скриптами и слабо осознавал, что происходит. Ну, например, начать с того, чтобы залогиниться (в бд уже создана учетная запись с паролем, ником и возможностью записи ip, ну то-есть для самого простого варианта), а потом при заходе пользователем на страницу он распознался, как пользователь (например, if login->hi cool fellow user). Ну с куками я принцип чуть-чуть понял, ну и по скриптам помню: set cokee & get cokee. А вот что за переменные на стороне сервера? Ну и как любым способом реализовать самую простую авторизацию и как потом методом серверной переменной распознавать, что пользователь зареген?
в данном случае этими командами set cokee и get cokee пользоватся не надо..
в начале всех скриптов пишешь session_start() ,
таким образом переменные глобального массива $_SESSION видны из всех скриптов в рамках сессии юзера
вот прочитай статью http://phpfaq.ru/sessions
ещё тут почитай комментарии http://www.codenet.ru/webmast/php/PHP-Sessions.php

Последний раз редактировалось ssdm; 13.07.2010 в 11:05.
ssdm вне форума Ответить с цитированием
Старый 14.07.2010, 07:24   #6
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Биг спасибо за session start! Только из-за его отсутствия не получалось. А я не понял, переменная записывается на сервере, а как потом получается, что эта переменная принадлежит именно тому юзеру, который ввел данные? А как в таком случае можно чужому человеку подстроить переменную под себя и взломать честного юзера? Ну и после этого идем дальше.
PHP код:
session_start();
    
$user_login$_POST['user_login'];
    
$user_pass $_POST['user_pass'];

if(
md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID']){
  if(!
$user_login && !$user_pass){$pines='Нет данных';}
}
   
   
  if(
$user_login && $user_pass){
      if (
$user_login && $user_pass){
      
$q1=mysql_query("SELECT * FROM sb_users WHERE user_login='$user_login' AND user_pass= '$user_pass' AND        

     user_status = '1'"
);
          if(
mysql_num_rows($q1)===1) {
          
$r=mysql_fetch_array($q1);
          
$_SESSION['user'] = $r['user_login'];
          
$_SESSION['password'] = $r['user_pass'];
          
$_SESSION['SID'] = md5(crypt($r['user_login'],$r['user_pass']));
          }
      }
  }


if(
md5(crypt($_SESSION['user'],$_SESSION['password'])) == $_SESSION['SID']){
$pines="Получилось";
}

echo(
$pines); 
Это у меня написано сейчас. Что еще пишется и с какими целями? Ну кроме упоминания об ошибках.
2. Еще хочу узнать это же про регистрацию. Сейчас знаю, что нужно:
написать ограничение на ввод символов;
поставить капчу;
написать активацию по e-mail (слабо понял, как?)
Ну забыл, что там еще, ведь там полтораскрипта еще против взлома, вроде, должно писаться.
3. Объясните мне про sql инъекцию. Ну я недопонял, что такого будет, если у меня на странице передаются данные post'ом, а пользователь переделает адрес. Вообще инъекция - это когда передают get'ом данные, или я чего-то не знаю насчет того, как можно передать информацию в скрипт?

Последний раз редактировалось Krasi; 14.07.2010 в 07:44.
Krasi вне форума Ответить с цитированием
Старый 14.07.2010, 11:22   #7
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

"А я не понял, переменная записывается на сервере, а как потом получается, что эта переменная принадлежит именно тому юзеру, который ввел данные?"
у юзера сохраняется id_сессии в куках, на сервере n-ое количество времени хранится сессия..
Цитата:
А как в таком случае можно чужому человеку подстроить переменную под себя и взломать честного юзера?
украсть id_сессию юзера

по пункту 2 и 3 - куча инфы в инете..
ssdm вне форума Ответить с цитированием
Старый 14.07.2010, 12:01   #8
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

PHP код:
if ($user_login && $user_pass && $user_email){
$error="Логин уже занят";
mysql_query("SELECT * FROM bla WHERE bla1 = '$user_login'");  
  if(
mysql_affected_rows() == 0){
  
$error 'Ошибка: лишние символы';
    if(
preg_match("/^[а-яa-zА-ЯA-Z0-9- _]+$/"$user_login) && preg_match("/^[а-яa-zА-ЯA-Z0-9- _]+$/"$user_pass)  

   && 
preg_match("/^[а-яa-zА-ЯA-Z0-9- _@.]+$/"$user_email)){

    
$uniq_id md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].mktime());
    
    
$qu1=mysql_query("INSERT INTO `bla` (bla1, bla2, bla3, bla4, bla5) VALUES         
('
$user_login', '$user_pass', '$user_email', '$uniq_id', '$_SERVER[REMOTE_ADDR]')");
      
      if(
$qu1){
      
$headers  "Content-type: text/html; charset=windows-1251 \r\n"
      
$headers .= "From: %$site_name% <$site_mail>\r\n"
      
$headers .= "Bcc: $sait_mail\r\n";

      
$mailto $user_email;
      
$subject "Подтверждение регистарции на сайте";
      
$message "Для активации аккаунта пройдите по следующей ссылке http://de_saito.ru/regusha.php?

activation=
$uniq_id";
      
$gogo mail($mailto$subject$message$headers);
        if(
$gogo
        {
$error "Осталось пройти проверку e-mail (вам пришло письмо на указанный адрес)";}
        else {
$error "Чудесная ошибка, попробуйте заново";}
      }
      else {
$error "Проблемка, упси";}
    }
  }
}

if(
$_GET['activpopo'] AND $_GET['activpopo'] != ''
{
$uniq_id $_GET['activpopo'];
$r=mysql_query("UPDATE bla SET blaxz = '1' WHERE blaxz2 = '$uniq_id'  AND bla xz = '0'"); // тут, если есть в таблице не активированная запись с уником, не активированная запись активируется  
if($r)
{
$error "Вы зарегистрировались, можете войти, используя форму входа.";}

1. Как в таком коде можно сделать подмену сессии? И какие вообще есть наиболее распространенные возможности подмены сессии?
2. Как при отправке почты вставляются переменные? я там показал, где надо, но я пробовал это все отправить в таком виде, отображается некорректно.
3. Чего явно не хватает в коде и как его оптимизировать?
Krasi вне форума Ответить с цитированием
Старый 14.07.2010, 12:14   #9
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Цитата:
1. Как в таком коде можно сделать подмену сессии? И какие вообще есть наиболее распространенные возможности подмены сессии?
Вот тебе ссылка на тему на нашем форуме http://programmersforum.ru/showthread.php?t=90156.
Так как сам в этом вопросе не силен.
Цитата:
2. Как при отправке почты вставляются переменные? я там показал, где надо, но я пробовал это все отправить в таком виде, отображается некорректно.
то есть? не совсем понял вопрос.. Но попробуйте так
$headers .= "From:".$site_mail." <".$site_mail.">\r\n";
Зы. рекомендую использовать класс для отправки почты HTMLMIMEMAIL5
ssdm вне форума Ответить с цитированием
Старый 14.07.2010, 12:32   #10
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Чтобы оптимизировать этот код, его нужно переписать процентов так на 80. Одни только названия столбцов MySQL чего стоят. Идеал документирования! )
Ошибки, почему-то, присваиваются ещё ДО проверки. ))
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С самого начала. krokusfs Помощь студентам 1 31.05.2010 20:42
Только начала изучать С++ помогите... masha17 Общие вопросы C/C++ 6 27.10.2009 20:17
Начала GiganT Компоненты Delphi 3 17.06.2008 17:13
Pascal//определить длину самого короткого и самого длинного слова в строке ShnurOK Помощь студентам 2 16.12.2007 10:43
Я-ноль: нужны проги для начала. Где? kypto8 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 31.03.2007 09:29