За последние 24 часа нас посетил 17521 программист и 1680 роботов. Сейчас ищут 808 программистов ...

Защита пользовательской части

Тема в разделе "PHP для новичков", создана пользователем Sub-zero, 24 окт 2009.

  1. Sub-zero

    Sub-zero Активный пользователь

    С нами с:
    21 май 2009
    Сообщения:
    48
    Симпатии:
    0
    Подскажите как обезапасить данные пользователей (сайт - чтото навроде записной книжки), то есть как обеспечить необходимый минимум? После проверки логина и пороля, пользователь перанаправляется на page.php?id=123, и далее перемещаеться по страницам с передоваемым id от страницы к странице, ссесии не используються. Все переменные инициализированы.
    Вот то что я думаю можно сделать: закодировать данные передоваемые через гет, еще сделать так - запомнить айпи с которым пользователь вошол, таким образом пользователь не сможет изменить id в адресной строке, ето будет работать? обязательно переменную о выполнении входа и времени входа. еще мое собственное изобретение :) - сделать все страницы с фреймами, таким образом адресная строка будет вопше пустая, если юзер откроет фрейм в отдельной вкладке, тогда переадресация на страницу с фреймами)
    Подскажите как правильно это делаеться? спасибо
     
  2. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    В таком случае по большому счету никак.

    Куки поставь при авторизации. И сверяй id с значением в куках. Если совпал - то можно показывать.
    Но это все ерунда.

    Нужны хотя бы сессии.
     
  3. toxin

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

    С нами с:
    12 мар 2009
    Сообщения:
    19
    Симпатии:
    0
    привязывать ip нет смысла, у многих ip динамический
     
  4. Pascal4eg

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

    С нами с:
    14 окт 2009
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Рыбинск
    все что ты напридумывал, извини, ерунда. я обычно делаю так: при авторизации посылаю две куки(логин, хеш от пароля(md5 например)). В БД у тебя будет храниться так же логин и хэш пароля. таким образом можешь проверять при заходе на сайт есть ли эти куки и совпадают ли они с тем что в БД. когда юзер жмет кнопку выйти, просто убиваем куки.
     
  5. Sub-zero

    Sub-zero Активный пользователь

    С нами с:
    21 май 2009
    Сообщения:
    48
    Симпатии:
    0
    понятно, всем спасибо. а не могли бы вы, дать ссылки на статьи или обсуждения как осуществить это с помощью ссесий. Еще такой вапрос, это не метод, но что если сделать все через пост, тогда по идее что ни делай с адресной строкой ничего не получится, какие в таком случае будут недостатки?
     
  6. Pascal4eg

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

    С нами с:
    14 окт 2009
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Рыбинск
    Придется каждую ссылку с помощью JavaScript делать, или ставить кнопку вместо ссылки, ибо ссылки не могут форму отправлять.
    И к тому же кому надо тот и пост отправит, и окажется в аккаунте пользователя, безопасно? думаю не очень.
     
  7. Sub-zero

    Sub-zero Активный пользователь

    С нами с:
    21 май 2009
    Сообщения:
    48
    Симпатии:
    0
    да придется еще кучу форм вставлять... не могли бы ва написать как это делается как надо, 1. - включаем тото 2.- используем тото там... ну и т.п., буду благодарен
     
  8. Pascal4eg

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

    С нами с:
    14 окт 2009
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Рыбинск
    Вариант с куками? Вот как то так:

    PHP:
    1.  
    2. //Если нажали выход - удаляем куки
    3. if (isset($_GET['exit'])) {
    4.   setcookie('login', "", time()-86400);
    5.   setcookie('hash', "", time()-86400);
    6. }
    7. else //Если производят вход - отправляем куки
    8.   if (isset($_POST['login']) and isset($_POST['password'])) {
    9.     setcookie('login', $_POST['login'], time()+86400);
    10.     setcookie('hash', md5($_POST['password']), time()+86400);
    11.   }
    12.  
    13. $authorized = false;
    14. $is_attempt = false;
    15.  
    16. if (!isset($_GET['exit']))
    17.   //Пробуем опознать пользователя по параметрам пришедшим по методу post
    18.   if (isset($_POST['login']) and isset($_POST['password'])) {
    19.     $login = $_POST['login'];
    20.     $hash = $_POST['password'];
    21.     $is_attempt = true;
    22.   }
    23.   else {  //Пробуем опознать пользователя по кукам
    24.     if (isset($_COOKIE['login']) and isset($_COOKIE['hash'])) {
    25.       $login = $_COOKIE['login'];
    26.       $hash = $_COOKIE['hash'];
    27.       $is_attempt = true;
    28.     }
    29.     else {  //Не получилось, извините
    30.       $authorized = false;
    31.     }
    32.   }
    33.    
    34. if ($is_attempt) {
    35.   $tmp_arr = $sql->sql_exec("select * from users where password='$hash' and login='$login'", 'select');  
    36.   $authorized = (sizeof($tmp_arr)==1);
    37. }
    38.  
    39. if ($authorized) {
    40.     //Грузим основные данные пользователя
    41.     $user_id = $tmp_arr[0]['id'];
    42.     $login = $tmp_arr[0]['login'];
    43.     // И т.д.
    44.     // Показываем все что нужно показать зашедшему юзеру
    45.   }
    46.   else {  //Пользователь не вошел в систему, показываем форму авторизации
    47.     // Показываем форму входа
    48.   }
    49.  
     
  9. Sub-zero

    Sub-zero Активный пользователь

    С нами с:
    21 май 2009
    Сообщения:
    48
    Симпатии:
    0
    Pascal4eg
    спасибо
     
  10. Sub-zero

    Sub-zero Активный пользователь

    С нами с:
    21 май 2009
    Сообщения:
    48
    Симпатии:
    0
    подскажите еще, пожалуйста, как применить base64_encode к данным вводимым через форму
     
  11. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    А md5 разве не лучше?
     
  12. Sub-zero

    Sub-zero Активный пользователь

    С нами с:
    21 май 2009
    Сообщения:
    48
    Симпатии:
    0
    просто понадобится еще base64_decode значение
     
  13. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    Pascal4eg
    Вот так я тоже изначально думал, но позже переделал так. Две куки :

    Первая hash. В ней md5 "рэндомного числа"+ слова (статическое слово, предложение, пароль юзера тут не участвует).
    Вторая login, значение в БД юзера. (т.е. id юзера мы не светим)

    При этом.. hash генерится каждый раз при логине и логауте (и меняется сразу в БД, исключение логаут по закрытию окна :( ). Т.е. зайти под одним акком одновременно двум и более не получится.

    Да только волнует кое что, при такой системе. Что будет если куки уведут? :) То что это вина юзера это ясно.. Но всё же как лучше уйти от этого? Что ещё привязывать в этом случаи к юзеру? Или же над этим вообще не стоит заморачиватья? Ваши мысли...
     
  14. berkoot7

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

    С нами с:
    23 фев 2009
    Сообщения:
    82
    Симпатии:
    0