За последние 24 часа нас посетили 19144 программиста и 1644 робота. Сейчас ищут 852 программиста ...

Теоретический вопрос по безопасности сессии

Тема в разделе "PHP для новичков", создана пользователем [code], 17 июл 2014.

  1. [code]

    [code] Новичок

    С нами с:
    14 июл 2014
    Сообщения:
    32
    Симпатии:
    0
    Доброго времени суток.
    Вопрос заключается в том, что стоит ли как-то извращаться и дополнительно защищать сессию?
    Например, у меня пароли пользователей лежат в БД в хэшированом виде, а когда пользователь авторизовывается, то под него заводится сессия. Так вот на сервере в temp`e создается файл сессии, в который я кладу значения логина и пароля в чистом виде. Их же вроде оттуда вообще невозможно достать? Мне кажется, что максимум, что может сделать плохой человек, то это украсть куку сессии пользователя и присвоить себе, и ходить по сайту уже под логином этого пользователя, но это и то при условии, что если злоумышленник успеет украсть сессию, пока она не закроется из-за бездействия 1440 сек. Надеюсь, понятно изложил суть вопроса :)
     
  2. Ke1eth

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

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Вопрос номер раз: а для чего тебе пароль в чистом виде? Для каких таких целей странных?
    А может у меня пароль это пробел?
     
  3. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    На шаред-хостингах сессии могут храниться в /tmp и соответственно другие пользователи хостинга смогут вытащить твои пароли при такой конфигурации.
     
  4. [code]

    [code] Новичок

    С нами с:
    14 июл 2014
    Сообщения:
    32
    Симпатии:
    0
    Ke1eth, ты меня похоже не понял и задал вообще бессмысленные вопросы. Не знаю зачем, но я на них отвечу, хоть они и не имеют отношения к данному вопросу. Пароль в чистом виде лежит только во временном файле сессии на сервере, а лежит он там в чистом виде, потому что мне лень было проводить лишние манипуляции и поэтому созрел вопрос этой темы: стоит ли вообще напрягаться по этому поводу. И пароль у меня пробелом быть не может, ибо я это проверяю.

    [vs], а вот тебе спасибо, дельный ответ. Буду иметь виду, если буду размещаться на шаред хостинге.
     
  5. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    В сессии хранить пароль не нужно. Ни в каком виде.
     
  6. [code]

    [code] Новичок

    С нами с:
    14 июл 2014
    Сообщения:
    32
    Симпатии:
    0
    MiksIr, тоже спасибо. Как - то запарился, просто сначала думал извращаться и зачем - то сохранял пароль в сессии, чтобы как - то потом с ним работать, а теперь понял, что вообще не надо.
     
  7. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Если важно, чтоб сессию не украли, то надо привязывать её к IP. Можно ещё и к браузеру в нагрузку.
     
  8. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Как ее привязать?
     
  9. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    При авторизации:
    Код (Text):
    1.  
    2. $_SESSION["user_id"] = $user_id;
    3. $_SESSION["user_ip"] = $_SERVER["REMOTE_ADDR"];
    Потом, когда проверяете, залогинен ли юзер:
    Код (Text):
    1.  
    2. $is_logged = isset($_SESSION["user_id"]) && $_SESSION["user_ip"] == $_SERVER["REMOTE_ADDR"];
    Если нужно проверять подсети, то чуть сложнее, но идея та же
     
  10. Ke1eth

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

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Код (Text):
    1. [/b], если мой вопрос показался бессмыссленным, то тут стоит задуматься, а зачем я задал?
    2. 1) НИКОГДА и НИГДЕ не храни пароли открытыми
    3. 2) НИКОГДА не делай ограничений для пользователя, если он хочет пробел, пусть будет пробел - это твоя головная боль, а не пользователя.
    4. 3) см. п.1
     
  11. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Тебя не о том спросили. Не почему он открытый, а зачем ты вообще хранишь пароль? Ты на каждый чих заново авторизацию проводишь? Не проще ли в сессии поставить флажок? Типа $_SESSION['logged_in'] = true?
     
  13. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    из реальной жизни:

    - для идентификации нам необходим и достаточен user_id. пусть анонимусу соответствует специальный случай, например user_id=0. тогда проверка на залогированность: if ($user_id)…

    - строго говоря перенос своих файлов сессии в другой каталог еще не обязательно защищает их от чтения другими пользователями. надо явно позаботиться об атрибутах доступа!

    Добавлено спустя 9 минут 45 секунд:
    - во избежание атаки session fixation надо генерировать новый session_id после успешного логина.

    - 9000 раз подумай прежде чем создавать долгоживущие сессии. это напряжно как по ресурсам, там и по секурности.

    - параметры secure и httponly по возможности ставь в true
     
  14. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    p.s. это уже не прямо про безопасность, но имеет значение:
    файл сессии блокируется на время выполнения скрипта. при некоторых раскладах с "асинхронными" запросами ajax это может привести к заметной задержке отрисовки страницы.