За последние 24 часа нас посетили 23283 программиста и 1702 робота. Сейчас ищут 1075 программистов ...

Подделка сессии

Тема в разделе "Вопросы от блондинок", создана пользователем lexa, 13 апр 2008.

  1. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Мучился сегодня, подделывал. :)

    Дело в том, что у меня скрипт проходит по форме (моей) и собирает атрибуты с input`ов (моих). Затем сохраняет в сессию вроде array(тип проверки, много букв, если проверка не прошла). И на последних строках скрипта стоит $_SESSION['check'] = 1. Вообщем, проверка POST`а будет только если этот check в сессии есть (типа страница один раз была загружена и значит если у инпутов были чекеры они пропарсились), в свою очередь сам POST пройдёт только если пройден чекер из отпарсеных инпутов. В php коде дублей проверки (набором if`ов или ещё как) нет (и без $_SESSION['check'] слалось бы всё легко и просто).

    Пытался всячески послать POST с других серверов (через fsockopen()). Ничего не прошло. Алилуя. Пытался подделать куку и сунуть в неё id сессии. Не прошло... В общем, пытался всяко как в голову приходило и ничего не прошло.

    Как сессию подделать/подставить или это обойти?

    P.S. Это в целях проверки своего скрипта и заделки дыр.
     
  2. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Я знаю только про метод подделки ID сессии (через cookie).
     
  3. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Сессии можно подделать только передав ID, при чем можно и GET-запросом.
     
  4. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    [vs]
    Это если ID через строку браузера передаются (в php.ini есть настройка)
     
  5. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Мало чего понял, если честно. Давай ты напишешь небольшой пример?
     
  6. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Elkaz
    По-умолчанию включены оба варианта, при чем редко когда это умолчание кто-либо изменяет.

    lexa
    "Обмануть" сервер передачей ID сессии можно, но сколь-мало защищенная система проверяет как минимум IP-адрес.
     
  7. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Примерный код.

    Форма:
    HTML:
    1. <form method="post" action="на саму себя">
    2. <input name="myname" value="Эрл" /><br />
    3. <input name="karma" check-this="Проверь карму!" /><br />
    4. <input type="submit" value="Отправить" />
    5. </form>
    PHP:
    PHP:
    1. <?php
    2. if ($_SESSION['check'] and $_POST and $_SESSION['form_checker'])
    3.     foreach ($_SESSION['form_checker'] as $checker) //$checker[0] содержит значение атирибута name (karma в приере). $checker[1] - значение атрибута check-this ("Проверь карму!" в примере).
    4.         // Код проверок.
    5.         // Если проверка прошла удачно, то всё что в $_POST пишем в базу.
    6.         // Если нет, то ничего не пишем, а делаем echo $checker[1].
    7.  
    8. // Всякий иной код.
    9.  
    10. $_SESSION['check'] = true;
    11. // Ниже ничего нет.
    12. ?>