За последние 24 часа нас посетили 52634 программиста и 1731 робот. Сейчас ищут 882 программиста ...

О безопасности $_COOKIE[""];

Тема в разделе "PHP для новичков", создана пользователем Mr.ILLUMINOR, 14 фев 2012.

  1. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    Я сравнительно недавно начал изучать PHP, поэтому прошу отнестись к моим вопросам снисходительно, если они покажутся вам глупыми. Заранее спасибо.

    Итак, я хочу сделать на своём сайте админку. Для этого хочу использовать глобальный массив $_COOKIE. Логика скрипта будет следующей.

    1. На странице будет размещена форма для ввода пароля администратора. Я ввожу пароль, он сверяется с паролем в БД, если пароли совпадают, то создаётся переменная $_COOKIE["Admin"]. Если пароли не совпадают, то меня вновь просят ввести пароль.

    2. На этой же странице будет иди проверка на существование переменной $_COOKIE["Admin"]. Если она не существует, то на странице выводится форма для ввода пароля администратора (см. пункт 1). Если переменная существует, то выводятся инструменты администратора.

    Волнующий меня вопрос: безопасно ли такое решение? То есть никто не сможет искусственно создать в браузере переменную $_COOKIE["Admin"] и тем самым получить доступ к инструментам администратора без ввода пароля?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    не безопасно. дайте адрес страницы - готов исполнять обязанности администратора))))
     
  3. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    http://localhost ;) а, если я занесу в переменную $_COOKIE["password"] введённый пароль и буду его каждый сравнивать с паролем из БД и, если пароли совпадают, то буду выводить инструменты администратора, а если нет, то просить ввести пароль. Или работа с $_COOKIE вообще не безопасна? Если да, то какие есть альтернативные варианты?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    куки можно и подделать.
    оптимально - пользователь отправил пару логин/пароль на странице авторизации -- проверили и если все хорошо -- стартовали сессию и отправили ему идентификатор
    пусть воруют идентификатор сколько угодно - мы же при каждом обращении к защищаемым скриптам будем проверять идентификатор сессии. а уж какая у нас будет проверка - браузер, айпишник и тд и тп - чем больше и мудренее тем лучше
    работает всё нормуль!)))
     
  5. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    Ещё один вопрос: возможно ли теоретичности расшифровать md5(md5($pass))? Я знаю, что есть много онлайн сервисов, которые предоставляют подобные услуга. Или всё это обман?
     
  6. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    http://www.php.ru/manual/faq.passwords.html#faq.passwords.fasthash
     
  7. yuri

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

    С нами с:
    16 янв 2012
    Сообщения:
    288
    Симпатии:
    2
    Тупо перебирают по словарю, простые пароли захешированные без "соли" типа 123, test и т.п.
     
  8. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    Ganzal, AndreJM, yuri, большое спасибо.
     
  9. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    yuri, я не являюсь автором сих изречений..
     
  10. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Во время авторизации берем ключ сессии из $_COOKIE['PHPSESSID'], заносим его в базу данных и соответственно в какой-нить еще один кукиз $_COOKIE['hesh'] например.
    Ну а дальше проверяем:
    Код (Text):
    1. если $_SESSION['user'] существует {
    2.     используем данные из этой сессии;
    3. } иначе {
    4.     если $_COOKIE['hesh'] совпадает с хешем из базы данных {
    5.         заполняем обратно массив сессий данными из БД;
    6.     } иначе {
    7.         авторизация; // создаем $_COOKIE['hesh']
    8.     }
    9. }
    Добавлено спустя 3 дня 7 часов 14 минут 11 секунд:
    Ну а в сессии ($_SESSION['access']) можно хранить права доступа. Если на сайте есть администраторы, модераторы и пользователи, можно туда циферку лепить 1, 2 или 3 соответственно. И когда пользователь пытается зайти в админку или что-то отредактировать на самом сайте - проверяется эта циферка. Чтобы не хранить их в кукезах и каждый раз не дергать из базы данных.
    Так-же в базе данных можно записывать IP пользователя, когда он вводит логин-пароль. И вместе с $_COOKIE['hesh'] проверять этот IP. Тогда если кто-то слямзит кукез - все равно не сможет им пользоваться, если IP не совпадет.
     
  11. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Нормальный вариант, только храните не пароль, а хеш от него, а так же подмешайте туда информацию о IP и браузере. Риск тут - если третьи лица украдут хеш у этого человека и будут знать алгоритм генерации хеша - то перебором смогут найти пароль.
    Перебором, а в случае заранее известных алгоритмов - по заранее построенным радужным таблицам. По-этому лучше использовать что-то посложнее, например http://www.php.ru/manual/function.crypt.html
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    на вид, двойной мд5 снижает стойкость ващета