За последние 24 часа нас посетили 19070 программистов и 1600 роботов. Сейчас ищут 1333 программиста ...

Прошу оценить авторизацию

Тема в разделе "PHP для новичков", создана пользователем Madkin, 23 апр 2010.

  1. Madkin

    Madkin Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    18
    Симпатии:
    0
    Доброго времени суток, господа!

    На днях столкнулся с проектом, в котором авторизация выполнена следующим образом:
    index.php
    Код (Text):
    1.  
    2. <?php
    3.     session_start();
    4.     $login=$HTTP_POST_VARS['login'];
    5.     $password=$HTTP_POST_VARS['password'];
    6.     if (isset($login) && isset($password))
    7.         {
    8.             $password=md5($password);
    9.             $db = mysql_pconnect('localhost','user','password');
    10.             mysql_select_db('db');
    11.             $query = 'SELECT * FROM users WHERE login = "'.$login.'" AND PASSWORD = "'.$password.'"';
    12.             $result = mysql_query($query);
    13.             if (mysql_num_rows($result) > 0)
    14.                 {
    15.                     $row = mysql_fetch_array($result);
    16.                     $HTTP_SESSION_VARS['id_user']=$row['id_user'];
    17.                 }
    18.     }
    19.     $id_user=$HTTP_SESSION_VARS['id_user'];
    20. ?>
    21. <html>
    22. <body>
    23. <?php
    24.     if(isset($id_user))
    25.         {
    26.         // Опустил разметку и код, если авторизация успешная
    27.         }
    28.     else
    29.         {
    30.         // Опустил разметку и код, если авторизация безуспешная    , окно ввода логина/пароля
    31.         }  
    32. ?>
    33. </body>
    34. </html>
    Далее на остальных страницах написано следующее:
    Код (Text):
    1.  
    2. <?php
    3. session_start();
    4. $id_user=$HTTP_SESSION_VARS['id_user'];
    5. if ($id_user == '') header ("Location:./index.php");
    6. // Далее следует разметка и код, если пользователь авторизирован
    7. ?>
    Что-то мне подсказывает, что безопасность хромает, хотя код работает.

    Разъясните, пожалуйста, что меня грызет? что тут не то?

    Заранее благодарен!
     
  2. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Странно что работает)))
    У тебя логин не фильтруется тут, сразу же попадая в запрос. Да и построение и обработка смущает.
     
  3. Madkin

    Madkin Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    18
    Симпатии:
    0
    Вот и мне странно, что работает. Но вот передо мной страница, пускает, если логин/пароль правильные. При попытке вручную вбить любую страницу, не авторизировавшись - вываливается на index.php с формой ввода логина/пароля, т.е. какбе работает.

    Писатель сего кода - студент техникума, ошибки в плане нефильтрации не удивляют.

    Вот и думаю - оставить "as is" или переделывать? Проект не публичный, но будет открытый.
     
  4. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    на странице авторизации в поле логин напиши символ апострофа и нажми сабмит.
    все станет ясно.
    или так
    '1=1
    должен по идее авторизовать.
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    deprecated
    SQL-инъекция
    бессмысленное использование постоянного соединения
     
  6. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    PHP:
    1. $password=$HTTP_POST_VARS['password'];
    пароль шастает по эфиру в открытом виде. так уже давно никто не делает. считают хэш на клиенте и передают его.
    PHP:
    1. $password=md5($password);
    с таким же успехом пароль можно в базе хранить в первозданном виде.
     
  7. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    пардон. инъекция будет выглядеть так:
    "' or 1=1 '
    (первые два символа - двойные кавычки и апостроф)
     
  8. Madkin

    Madkin Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    18
    Симпатии:
    0
    Господа, я кажется не договорил или не правильно разъяснил.

    Интересовала правильность применения кода на других страницах.
     
  9. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    провоцируешь очередной срач по поводу глобальных переменных?))
    код вполне легален, только нужно следить, чтобы $id_user никем не перекрылась однажды.
     
  10. Madkin

    Madkin Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    18
    Симпатии:
    0
    Ну не зря в форум для новичков написал )). Сам я не претендую на звание PHP-программиста и видимо знаний не хватает, чтобы оценить то, что мне подсунули, потому и вопрошаю тут.
     
  11. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    А какие у тебя тогда есть варианты? Попросить, чтоб другое подсунули? Начать латать дыры?
    Откровенно говоря, код - гагно. Ничего поражающего воображение.
    Допустим, доверять такой авторизации охрану частной информации я бы не стал.
     
  12. Madkin

    Madkin Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    18
    Симпатии:
    0
    Ну для закрытия обсуждений сделаем вывод:
    1. авторизацию на index.php надо изменить (заглянем в http://www.php.ru/forum/viewforum.php?f=27)
    2. остальные страницы в доработке не нуждаются.

    ммм?
     
  13. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Может там magic_quotes?