Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с авторизацией 
:(
    Опции темы
mitris
Дата 12.9.2007, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 4.5.2007

Репутация: -1
Всего: нет



Сделал на сайте аутентификацию пользователей с куками.
Когда нажимаю кнопку выходи, то кука не удаляется, а создается еще одна кука с таким же именем, только пустая.

user posted image

А вот сам код страницы выхода.

Код

<?php
if(session_is_registered("login"))
 {
  if(isset($_COOKIE["login"]))
   {
    setcookie("login");
   }
  if(isset($_COOKIE["user_id"]))
   {
    setcookie("user_id");
   }
  session_destroy();
  /**/
  include "tmpl/head.php";
  redirect("<center>Выполнено</center>","/index/","1000","y");
  include "tmpl/foot.php";
 }
else
 {
  include "tmpl/head.php";
  redirect("Ошибка! Сначала нужно авторизоватся.","/index/","1000","y");
  include "tmpl/foot.php";
 }
?>


Помогите организовать правильный скрипт выхода пользователей...
ПыСы. Когда пользователь входит, он может зайти просто (юзаю просто сессии) и поставив галочку "запомнить" (то есть юзаю куки и сессии). 
Когда просто сессии, то при каждом заходе на сайт ему нужно повторно авторизоватся.
А когда юзер выбирает "запомнить", скрипт записывает значения кук, и при следующем заходе на страницу скрипт проверяет, есть ли определенные куки, если есть, он регистрирует в сессии их, а если их нету, то пользователь должен повторно авторизовыватся.

ПыПыСы. раньше просто делал на сессих , без кукисов(пользоватлею приходилось каждый раз авторизовыватся), то все работало нормально, а тут решил попробовать с кукисами и не получается...
PM MAIL   Вверх
Sannis
Дата 12.9.2007, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.8.2007
Где: Москва

Репутация: 6
Всего: 13



Cудя по ману на php.net нужно писать
Код
setcookie('user_id', '');


P.S. И вот ещё что. Если смешивать авторизацию по кукам и сессии - могут глюки быть... Храните тогда сессию(переменные) тоже в куках...

Это сообщение отредактировал(а) Sannis - 12.9.2007, 08:34


--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
mitris
Дата 13.9.2007, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 4.5.2007

Репутация: -1
Всего: нет



Sannis, хм, попробую...спасибо!
PM MAIL   Вверх
Acer
Дата 13.9.2007, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Я думаю, что лучше будет сделать авторизацию на сессии. И в форме авторизации спрашивать у юзера, запомнить его на данном компе или нет. Если "запомнить", то тогда устанавливать куки...
Почитайте мануал по работе с куками. Там все просто.
PM MAIL   Вверх
mitris
Дата 14.9.2007, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 4.5.2007

Репутация: -1
Всего: нет



Acer, вот как Вы написали, так я с самого начала и делал
Вот и возникли проблемы с этим....

ПыСы. кто-то знает каким образом в IPB шифруются пароли ???
md5() - не подходит...
PM MAIL   Вверх
dsCode
Дата 14.9.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

Репутация: нет
Всего: 26



mitris, 


Цитата(mitris @  12.9.2007,  06:37 Найти цитируемый пост)
  if(isset($_COOKIE["login"]))
   {
    setcookie("login");
   }

Что это? "Если уже есть кука, снова ее поставим"?

Для удаления куки нужно задать просроченное время:

Код

// set
setcookie("TestCookie", $value);

// remove
setcookie ("TestCookie", "", time() - 3600);




--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
Acer
Дата 14.9.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Сделайте кнопку(если юзер авторизован, ее видно)
Код

<form method="POST" action"/">
     <input type="hidden" name="logout" value="1" />
     <input type="submit" value="Logout" />
</form>

А потом проверяйте наличие пост переменной logout и если она есть удаляйте сессию авторизации и куку
Код

if (isset($_POST['logout']))
{
    session_unregister('login');
    unset($_COOKIE['login']);
    setcookie('login','',time() - 100000);
}

PM MAIL   Вверх
mitris
Дата 14.9.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 4.5.2007

Репутация: -1
Всего: нет



Блин, новая проблема появилась, причем не одна....
Я на сайте юзаю mod_rewrite() то есть URL выглядит следующим образом http://mysite/news/view/1/ , например.
Страница авторизации находится по адресу http://mysite/login/
При попытке зарегить куку лишь на период сессии (пока открыт браузер, но без использования session_start() ) то  есть, я время не указываю, и оно регит куку лишь для папки login хотя, на самом деле такой папки не существует...
А, когда указываю path то приходится указывать время действия куки, а это уже получается не на время сессии...
как сделать, что бы кука жила лишь на время сессии и была доступна из корневой директории ???

Добавлено через 1 минуту и 37 секунд
И еще, у меня на сайте была функция которая показывала, кто в данный момент на сайте.
В БД я заносил ID сессии, а если работать просто с куками, без сессий, то откуда брать это ID ? Иил чем его можно заменить ???
Или дла этих целей прийдется начинать сессию ???
PM MAIL   Вверх
Golda
Дата 14.9.2007, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



Цитата(mitris @  14.9.2007,  17:04 Найти цитируемый пост)
А, когда указываю path то приходится указывать время действия куки, а это уже получается не на время сессии...


указывайте время null

Цитата(mitris @  14.9.2007,  17:04 Найти цитируемый пост)
В БД я заносил ID сессии, а если работать просто с куками, без сессий, то откуда брать это ID ? Иил чем его можно заменить ???


Фактически, выбор у Вас: либо использовать штатные средства php по работе с сессиями, либо эмулировать их же самостоятельно с использованием базы данных. Как вариант, можно использовать  обычные сессии и переопределить местом хранения сесси базу данных  smile  

Это сообщение отредактировал(а) Golda - 14.9.2007, 23:52


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
ewolf
Дата 15.9.2007, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 8
Всего: 18



Цитата(mitris @  14.9.2007,  17:04 Найти цитируемый пост)
А, когда указываю path то приходится указывать время действия куки, а это уже получается не на время сессии...как сделать, что бы кука жила лишь на время сессии и была доступна из корневой директории ???


Установить параметр expire функции setcookie равным 0 - об этом написано в документации функции.

Цитата(mitris @  14.9.2007,  17:04 Найти цитируемый пост)
В БД я заносил ID сессии, а если работать просто с куками, без сессий, то откуда брать это ID ? Иил чем его можно заменить ???Или дла этих целей прийдется начинать сессию ???


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

Работать только с куками я бы не советовал, т.к. бывает, что у некоторых параноидальных пользователей они запрещены. 

Я бы сделал примерно такой алгоритм авторизации

Код

if( isset($_SESSION['auth']) )
{
   // Установлена сессия
   // Проверяем правильность сессии, например через хэш пароля
   if( check($_SESSION['auth']['user_id'], $_SESSION['auth']['hash']) )
      return $_SESSION['auth']['user_id'];
   else
   {
       unset($_SESSION['auth']);
       setcookie(...) ; // Удаляем куки (хотя их может и не быть)
       return false;
   }
}
elseif( isset($_COOKIE['auth']) )
{
   // Установлены куки
   // Проверяем их правильность
   if( check($_COOKIE['auth_user_id'], $_SESSION['auth_hash']) )
   {
      $_SESSION['auth']['user_id'] = $_COOKIE['auth_user_id'];
      $_SESSION['auth']['hash'] = $_SESSION['auth_hash'];
      return $_SESSION['auth']['user_id'];
   }
   else
   {
      setcookie(...) ; // Удаляем куки
      return false;
   }
}
else
{
   // Обрабатываем незарегистрированного пользователя
}


Сами куки устанавливать только в момент входа пользователя (когда он вводит свои логин и пароль)

Цитата(mitris @  14.9.2007,  08:34 Найти цитируемый пост)
 кто-то знает каким образом в IPB шифруются пароли ???md5() - не подходит...

По-моему все-таки md5. Смотри в папке sources\loginauth




Это сообщение отредактировал(а) ewolf - 15.9.2007, 01:03
PM MAIL ICQ   Вверх
mitris
Дата 15.9.2007, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 4.5.2007

Репутация: -1
Всего: нет



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


ПыСы. я пытаюсь таким образом проверять

Код

      if(isset($_POST["rem"]))
       {
        $cookie_time=mktime()+4800000;
        setcookie("login", $row["login"], $cookie_time, "/");
        setcookie("user_id", $row["id"], $cookie_time, "/");
       }
      else
        {
            $login=$_POST["user_login"];
            $user_id=$row["id"];
            $_SESSION["login"]=$row["login"];
            $_SESSION["user_id"]=$row["id"];
            session_register("login");
            session_register("user_id");
        }


и даже если не отмечена галочка "запомнить" кукису все-равно присваивается время жизни не только на время сессии

Добавлено через 56 секунд
И еще вопрос, можно как-то проверить в установленной куке, время ее жизни ?? Ну типа сколько ей еще осталось жить, или она просто на время сессии установлена ???
PM MAIL   Вверх
mitris
Дата 15.9.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 4.5.2007

Репутация: -1
Всего: нет



Все, решил проблему, используя лишь сессии и одну куку имитирующую ID сессии.

Вот код :
может кому-то пригодится

config.php
Код

<?php
function code($length=6) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789";
    $code = "";
    $clen = strlen($chars) - 1;  
    while (strlen($code) < $length) {
            $code .= $chars[mt_rand(0,$clen)];  
    }
    return $code;
} 
function set_online()
 {
/* START OF STATISTIC */
  GLOBAL $_SESSION, $_COOKIE;
/*********************************/
  $cookie_time = mktime() + 360000;
  $mktime = mktime();
/*********************************/
   if(isset($_COOKIE["sid"]))
    {
     $sid = $_COOKIE["sid"];
    }
   else
    {
     $sid = md5(code(20));
    }
   @setcookie("sid", $sid, $cookie_time, "/");
/*********************************/
  if(isset($_SESSION["user_id"]))
   {
    $uid = $_SESSION["user_id"];
   }
  else
   {
    $uid = 0;
   }
/*********************************/
  $sql = mysql_query("SELECT * FROM session WHERE sid='".$sid."'");
  $row = mysql_fetch_array($sql);
  if($row == true)
   {
    mysql_query("UPDATE session set uid='".$uid."', time='".$mktime."' WHERE sid='".$sid."'");
   }
  else
   {
    mysql_query("INSERT into session VALUE('".$sid."', '".$uid."', '".$mktime."')");
   }
/*********************************/
  $sqll = mysql_query("SELECT * FROM session");
  while($roww = mysql_fetch_array($sqll))
   {
    if(($mktime - $roww["time"]) >= 300)
     {
      mysql_query("DELETE FROM session WHERE sid='".$roww["sid"]."'");
     }
   }
/* END OF STATISTIC */
 }
set_online();
$sql = mysql_query("SELECT * FROM login WHERE sid='".$_COOKIE["sid"]."'");
$row = mysql_fetch_assoc($sql);
if($row == true)
 {
  if($row["rem"] == 1)
   {
    $user = mysql_fetch_assoc(mysql_query("SELECT * FROM users WHERE id='".$row["id"]."'"));
    $login = $user["login"];
    $user_id = $user["id"];
    session_register("login");
    session_register("user_id");
   }
 }
?>


login.php
Код

<?
$mes = array();
if(!session_is_registered("login"))
 {
  if(isset($_POST["sub"]))
   {
    $error=0;
    if(empty($_POST["user_login"]))
     {
      $mes[] = "<center>Вы не ввели логин.</center>";
      $error++;
     } 
    if(empty($_POST["pass"]))
     {
      $mes[] = "<center>Вы не ввели пароль.</center>";
      $error++;
     }
    $sql=mysql_query("SELECT * FROM users WHERE login='".$_POST["user_login"]."'");
    $row=mysql_fetch_array($sql);
    if(!empty($_POST["user_login"]) && !empty($_POST["pass"]) && $row==false)
     {
      $mes[] = "<center>Ошибка! Такого пользователя не существует.</center>";
      $error++;
     }
    if(!empty($_POST["user_login"]) && !empty($_POST["pass"]) && $row==true)
     {
      if($row["pass"]!=md5($_POST["pass"]))
       {
        $mes[] = "<center>Не верный пароль</center>";
    $error++;
       }
     }
    if($error==0)
     {
      $mktime = mktime();
      if(isset($_POST["rem"])) mysql_query("INSERT INTO login (sid, uid, rem, time) VALUES('".$_COOKIE["sid"]."', '".$row["id"]."', '".$rem."', '".$mktime."')");
      $login = $row["login"];
      $user_id = $row["id"];
      session_register("login");
      session_register("user_id");
      include "tmpl/head.php";
      print "<center>Вы успешно авторизовались.</center>";
      redirect("Вы сейчас будете автоматически перемещены.","/index/","1000","y");
     }
    if($error!=0)
     {
      include "tmpl/head.php";
      foreach($mes as $mess)
       {
        print $mess;
       }
      login();
      include "tmpl/foot.php";
     }
    include "tmpl/foot.php";
   }
  if(!isset($_POST["sub"]))
   {
    include "tmpl/head.php";
    login();
    include "tmpl/foot.php";
   }
 }
else
 {
  include "tmpl/head.php";
  print "<center>Ошибка! Авторизация уже выполнена.</center>";
  redirect("Вы сейчас будете автоматически перемещены.","/index/","1000","y");
  include "tmpl/foot.php";
 }

?>


exit.php
Код

<?php
if(session_is_registered("login"))
 {
  $sql = mysql_query("SELECT * FROM login where sid='".$_COOKIE["sid"]."'");
  $row = mysql_fetch_assoc($sql);
  if($row == true)
   {
    mysql_query("DELETE FROM login WHERE sid='".$_COOKIE["sid"]."'");
   }
  session_destroy();
  include "tmpl/head.php";
  redirect("<center>Выполнено.</center>","/index/","1","y");
  include "tmpl/foot.php";
 }
else
 {
  include "tmpl/head.php";
  redirect("Ошибка! Сначала нужно авторизоватся.","/index/","500","y");
  include "tmpl/foot.php";
 }
?>




ПыСы. если заметите какую-то ошибку в коде, скажите пожалуйста мне, что бы я исправил...

Добавлено через 1 минуту и 5 секунд
UPD. код проверил. у меня работает так, как нужно....
PM MAIL   Вверх
Golda
Дата 15.9.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



Замечаний к Вашему коду довольно много. 

1. Самое главное - неясно, зачем понадобилось смешивать самодельные сессии с настоящими? Вся информация уже есть в базе, признак того, нужно ли запоминать пользователя, храниться в таблице login. Зачем примешивать сессии?

2. Если уж используете сессии, делайте это последовательно. Не стоит использовать и старый подход (session_register() и session_is_registered()) и новый (массив $_SESSIONS). Второй предпочтительнее, т.к. в глобальных переменных не смешивается все на свете. Кстати, нигде не видно, где Вы стартуете сессию. Надеетесь на автоматический старт при session_register()? Тогда проверка isset($_SESSION["user_id"]) в 29 строке файла config.php пролетает. Хотя, возможно, session_start() не показан, а находится в файле, который подключает config.php до его подключения. Это так?

Дальше по мелочи.
  • GLOBAL $_SESSION, $_COOKIE;
     - бесполезная строка. Массивы $_SESSION, $_COOKIE - суперглобальные. Они и так видны в любом контексте
  • Я бы не тратила время на очистку таблицы session от мусора при каждом вызове скрипта. Лучше ввести некоторую вероятность, связанноую с предполагаемой часотой вызова скрипта
    Код

    if (rand(0,100) <= $probability) {
       // здесь очистка таблицы session от устаревших данных
    }
  • Поскольку в одном скрипте используется несколько SELECT-запросов, имеет смысл явно очищать ресурсы с помощью функции  mysql_free_result()
  • Есть проблема безопасности, связанная с тем, что не экранируются и не фильтруются переменные пришедшие от пользователя, перед подстановкой в запрос
    Код

        $sql=mysql_query("SELECT * FROM users WHERE login='".$_POST["user_login"]."'");
  • В строке 36 login.php лучше явно использовать $_POST["rem"], а не $rem в INSERT-запросе. Зачем зависить от настройки register_globals? Ну и экранировать эту переменную перед подстановкой в запрос не помещает 
  • В строке 66 config.php вероятно описка? Должно быть  
    Код

    "SELECT * FROM users WHERE id='".$row["гid"]."'"

    ? судя по INSERT-запросам поля id в таблице login нет
  • Проверки результативности SELECT-выборки типа if($row == true) работать будут, но зачем допускать грязь (заранее расчитывать на неявное преобразование типов)? На мой взгляд, лучше if (!empty($row)) или if ($row !== false)



--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
mitris
Дата 15.9.2007, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 4.5.2007

Репутация: -1
Всего: нет



Цитата(Golda)

Замечаний к Вашему коду довольно много. 

1. Самое главное - неясно, зачем понадобилось смешивать самодельные сессии с настоящими? Вся информация уже есть в базе, признак того, нужно ли запоминать пользователя, храниться в таблице login. Зачем примешивать сессии?
Заношу данные в таблицу, просто по другому себе ен представляю как только на сессиях сделать постоянную авторизацию...
Хотя...

2. Если уж используете сессии, делайте это последовательно. Не стоит использовать и старый подход (session_register() и session_is_registered()) и новый (массив $_SESSIONS). Второй предпочтительнее, т.к. в глобальных переменных не смешивается все на свете. Кстати, нигде не видно, где Вы стартуете сессию. Надеетесь на автоматический старт при session_register()? Тогда проверка isset($_SESSION["user_id"]) в 29 строке файла config.php пролетает. Хотя, возможно, session_start() не показан, а находится в файле, который подключает config.php до его подключения. Это так?
Сегодня попробую переделать и использовать сессии
Дальше по мелочи.

  • GLOBAL $_SESSION, $_COOKIE;
     - бесполезная строка. Массивы $_SESSION, $_COOKIE - суперглобальные. Они и так видны в любом контексте
  • Я бы не тратила время на очистку таблицы session от мусора при каждом вызове скрипта. Лучше ввести некоторую вероятность, связанноую с предполагаемой часотой вызова скрипта
    Код

    if (rand(0,100) <= $probability) {
       // здесь очистка таблицы session от устаревших данных
    }

  • Поскольку в одном скрипте используется несколько SELECT-запросов, имеет смысл явно очищать ресурсы с помощью функции  mysql_free_result()
  • Есть проблема безопасности, связанная с тем, что не экранируются и не фильтруются переменные пришедшие от пользователя, перед подстановкой в запрос
    Код

        $sql=mysql_query("SELECT * FROM users WHERE login='".$_POST["user_login"]."'");

  • В строке 36 login.php лучше явно использовать $_POST["rem"], а не $rem в INSERT-запросе. Зачем зависить от настройки register_globals? Ну и экранировать эту переменную перед подстановкой в запрос не помещает 
    Здесь я случайно пропустил $_POST["rem"]
    Экранировать строки, то есть ???

  • В строке 66 config.php вероятно описка? Должно быть  
    Код

    "SELECT * FROM users WHERE id='".$row["uid"]."'"

    ? судя по INSERT-запросам поля id в таблице login нет
    Это не таблица login, а таблица users
  • Проверки результативности SELECT-выборки типа if($row == true) работать будут, но зачем допускать грязь (заранее расчитывать на неявное преобразование типов)? На мой взгляд, лучше if (!empty($row)) или if ($row !== false)



вот...
PM MAIL   Вверх
Golda
Дата 16.9.2007, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



Цитата(mitris @  15.9.2007,  21:47 Найти цитируемый пост)
Заношу данные в таблицу, просто по другому себе ен представляю как только на сессиях сделать постоянную авторизацию...

База - неплохой вариант. Я бы на Вашем месте избавилась от ненужного использования сессий. Меньше переделывать.

Цитата(mitris @  15.9.2007,  21:47 Найти цитируемый пост)
Сегодня попробую переделать и использовать сессии

Надеюсь, Вы имели в виду использовать массив $_SESSION

Цитата(mitris @  15.9.2007,  21:47 Найти цитируемый пост)
Экранировать строки, то есть ???

Есть хорошая функция mysql_real_escape_string(). Чтобы понять, для чего это нужно, почитайте о SQL-инъекциях

Цитата(mitris @  15.9.2007,  21:47 Найти цитируемый пост)
В строке 66 config.php вероятно описка? Должно быть  

    
"SELECT * FROM users WHERE id='".$row["uid"]."'"

? судя по INSERT-запросам поля id в таблице login нет
Это не таблица login, а таблица users

В строке 36 файла login.php есть INSERT-запрос, судя по которому таблица login содержит следующие поля (sid, uid, rem, time). Возможно, конечно, есть еще поля, у которых какие-то умолчательные значения. Дальше. В строке 66 config.php идет запрос, конечно, к таблице users. Но подставляется $row['id'], полученное в результате предыдущего запроса
Код

"SELECT * FROM login WHERE sid='".$_COOKIE["sid"]."'"

$row['id'] здесь может появиться, только если в таблице login есть поле id. По смыслу, речь идет о идентификаторе пользователя, который, кажется, представлен у Вас в таблице login полем uid.



--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0757 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.