Авторизация на Php и защита сессий

Discussion in 'PHP' started by Mirovan, 11 Nov 2006.

  1. Mirovan

    Mirovan Elder - Старейшина

    Joined:
    10 Apr 2005
    Messages:
    49
    Likes Received:
    0
    Reputations:
    0
    Есть некий скрипт, с помощью которого юзер авторизуется на сайте. После этого он должен получить доступ к персональным данным.

    В начале я использовал сессии, но тестирую обнаружил что без труда можно подделать сессию. Как избежать этой ситуации ?


    Для первоначальной защиты использую:

    PHP:
    // если пользователь пришёл с любой страницы
    //нашего сайта, то он наш, иначе выдаем ему ошибку
    //$_SITE_PATCH - url сайта
        
    if(!eregi("^$_SITE_PATCH",$HTTP_REFERER)){
          echo(
    "Авторизация производится только со страницы <a href=\"index.php?show=enter\">".$_SITE_PATCH."index.php?show=enter</a>");
          exit;
        }

    Тем не менее $HTTP_REFERER - формируется браузером. Поэтому защита здесь всего лишь мнимая.


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

    т.е. к примеру, я зарегистрировал сессию:
    PHP:
    session_start();
    $_SESSION['login']="user1";

    при переходе на другую страницу проверяю
    session_start
    ();
    if (empty(
    $_SESSION['login'])) {
    exit;
    } else {
    //Доступ к персональным данным
    }
    Сессию можно подделать прийдя с другого сайта вместе с переменной $_SESSION['login']

    КАк все таки быть, как должно выглядеть проверка на юзера?
     
  2. SMiX

    SMiX Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    227
    Likes Received:
    55
    Reputations:
    29
    Привязывай сессию к айпи.
    Юзай тег
    PHP:
     в сообщениях.
    $HTTP_REFERER надо брать так$_SERVER['HTTP_REFERER']
     
  3. Mirovan

    Mirovan Elder - Старейшина

    Joined:
    10 Apr 2005
    Messages:
    49
    Likes Received:
    0
    Reputations:
    0
    Есть конечно выриант проверки соответствия какой нить случайной переменной сессии Sid присвоенной для определённого логина, но опять же вопрос где хранить её? если в базе, то как её оттуда удалить , по истечению какого времени
     
  4. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Юзай кукисы и все =)
     
  5. Mirovan

    Mirovan Elder - Старейшина

    Joined:
    10 Apr 2005
    Messages:
    49
    Likes Received:
    0
    Reputations:
    0
    Отыскал хорошую статейку по сессиями др. - http://php.spb.ru/php/session.html

    Не найдя оптимального решения, пришлось юзать Кукисы :((
     
  6. Pochka

    Pochka Banned

    Joined:
    26 Nov 2005
    Messages:
    27
    Likes Received:
    7
    Reputations:
    -2
    Не совсем ясно, что значит подделать сессию. Подделать сессию нельзя, все данные сессии хранятся на сервере. Можно как-то угадать (хм, сомнтиельно) или угнать номер сессии и использовать ее, но это представляет угрозу только в случае если сессия не привязана к IP или если привязана, но оба пользователя находятся за одним шлюзом, т.е. имеют одинаковый внешний IP адрес

    Не понял смысл вот этой фразы.

    С какого сайта к вам зашли Вы не сможете проверить 100%но никаким способом. Вы можете проверять referer или насовать каких-то умных javascript'ов против подделки http запроса, однако строить на этом какую-либо защиту бессмысленно. Хотя я даже не понял защиту чего именно Вы хотите организовать проверкой реферера
     
  7. Mirovan

    Mirovan Elder - Старейшина

    Joined:
    10 Apr 2005
    Messages:
    49
    Likes Received:
    0
    Reputations:
    0
    Хех, прочитал что писал 2 года назад, ну я дал :)

    Аж смешно, подделать сессию, извините, что ламерил, хотя, все мы такие когда то были :)
     
Loading...
Similar Threads - Авторизация защита сессий
  1. GAiN
    Replies:
    3
    Views:
    7,894