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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аутентификация на php - ошибки и уязвимости 
:(
    Опции темы
Frozen_Coyote
Дата 10.11.2012, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Привет всем! Наслушавшись всяких ужасов про неправильную организацию аутентификации пользвателя на сайте + просмотрев по разным форумам все различные самопальные классы, в которых писатели с даром обгаживали чужие творения и с неменьшим жаром защищали свои, решил посветоваться как же более менее грамотно защититься от кражи сессии подмены, отравления и прочее. Ниже я прикладываю простетский свой код, на примере которого, надеюсь, тем, кому не лень будет объяснить или указать на ошибки, можно будет потыкать меня носом smile) Спасибо заранее

итак:

Код

// кнопка "Проверка логина-паролья" нажата
if(isset($_POST["CheckMe"]))
    {
        $res = mysqli_query($connect_to_base,
        "
        SELECT * FROM register_users
        WHERE user_login = '".$_POST["UserLogin"]."' AND user_password = '".md5($_POST["UserPassword"])."'
        "
        );
    // Связка "Логин" - "Пароль" существует в базе
        if(mysqli_num_rows($res) == 1)
        {
         while($e = mysqli_fetch_array($res))
         {
             // Юзер не забанен
             if($e["user_ban"] == 0 and $e["user_confirmed"] == 1)
             {
              // user_uin - это поле в таблице базы, в котором хранится некий uin нашего пользователя, который формируется при регистрации
              $_SESSION["UserSession"] = $e["user_uin"];

                    mysqli_query(
                    $connect_to_base,
                    "
                    UPDATE register_users
                    SET
                    user_ip = '".get_user_ip()."',
                    user_last_enter = '".CurrDate()."'
                    WHERE user_id = '".$_SESSION["own_user_id"]."'
                    "
                    );

                 echo "Привет, старй знакомый";
                }

                // Не забанен, но не подтвердил
                elseif($e["user_ban"] == 0 and $e["user_confirmed"] == 0)
                {
                 echo "Вы не подтвердили свою регистрацию переходом по ссылке высланной вам по e-mail";
                }

                // Забанен
                else
                {
                 echo "Зпрещен доступ";
                }
         }
        }
    // Неправильный логин или пароль
        else
        {
         echo "Неправильный логин или пароль";
        }
    }


Это сообщение отредактировал(а) Frozen_Coyote - 10.11.2012, 13:51
PM MAIL   Вверх
Sanchezzz
Дата 10.11.2012, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



WHERE user_login = '".$_POST["UserLogin"]."' AND ...

А кто это сделал??? 

наверняка если вы смотрели много сайтов то там хоть один упомянул то что приходит от пользователя обязательно должно проходить проверку, оберните все что пришло из вне mysqli_real_escape_string(string);


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Frozen_Coyote
Дата 10.11.2012, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

Это сообщение отредактировал(а) Frozen_Coyote - 10.11.2012, 21:53
PM MAIL   Вверх
skyboy
Дата 11.11.2012, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

Репутация: 75
Всего: 260



Цитата(Frozen_Coyote @  10.11.2012,  20:52 Найти цитируемый пост)
имеете ввиду при регистрации пользователя данные заворачивать перед занесением в базу? или при самой проверке?

SQL injection отлично живет в любом запросе — хоть регистрации, хоть проверке
PM MAIL   Вверх
Sanchezzz
  Дата 11.11.2012, 10:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



ТС думаю в этой мини статье у вас убавится пару вопросов.
Скажу сразу что mysqli_real_escape_string это ручной способ когда вы не хотите использовать параметризацию (подготовленные выражения).
Я же вам советую использовать подготовленные выражения PDO или mysqli это поддерживает.


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Frozen_Coyote
Дата 14.11.2012, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Понял, спасибо, поработаю.
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.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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