За последние 24 часа нас посетили 17518 программистов и 1727 роботов. Сейчас ищут 964 программиста ...

О подмене id

Тема в разделе "Прочие вопросы по PHP", создана пользователем slavak78, 16 ноя 2009.

  1. slavak78

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

    С нами с:
    16 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    У меня такой вопрос. Допустим, пользователь имеет id=1. Этот пользователь авторизовался на сайте и просматривает, допустим, фотоальбом другого пользователя, у которого id=2. На этой странице для него скрыта ссылка "Редактировать альбом". Но если этот пользователь с id=1 заменит свой id на id=2, то ссылка "Редактировать альбом" появляется и, соответственно, он может редактировать альбом другого пользователя.
    Вконтакте, в адресной строке, помимо указанного id пользователя, есть и набор цифр, который, как я понимаю, и защищает от подмены id, поскольку если заменяешь id, то выдается сообщение Not Found. Подскажите, пожалуйста, как можно реализовать подобную защиту от подмены id.

    $g = $_COOKIE['autorization']; //хранится куки авторизованного пользователя в виде его email
    $f = db_query("SELECT * FROM users WHERE email = '$g'"); //функция db_query прописана в отдельном файле, на этом не надо заострять внимание
    $pl = mysql_fetch_array($f);
    $pls = $pl['id']; //берем id авторизованного пользователя

    $id = $_GET['id']; // берем id того пользователя, чей это альбом

    Вот дальше то я и не знаю, как сделать, чтобы ссылка редактировать альбом появилась только для владельца альбома, т.е. id., а сам альбом пользователя c данным id открылся.

    если писать:

    if(isset($_COOKIE['autorization']))
    {
    if($pls==$id)
    {
    показать ссылку
    }
    }

    Но это ерунда, заменяешь id, и чужой альбом доступен авторизованному пользователю.
     
  2. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    какой id заменяешь? $pls не берется с формы, его фиг заменишь. $id? при открывании альбома бери $id, используй его только как параметр запроса "чей альбом вытаскивать из базы". Оттуда же из базы тащишь альбом и id создателя альбома. С ним свой $pls и сравнивай.
     
  3. slavak78

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

    С нами с:
    16 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    заменяю id в адресной строке. А можно поточнее, что означает параметр запроса "чей альбом вытаскивать из базы"? Т.е. создать какое-то дополнительное поле в базе данных альбомов, я правильно понимаю?
     
  4. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Так. У тебя есть пользователь, который хочет посмотреть чей-то альбом. Каким образом твой скрипт узнает, чей именно альбом он хочет посмотреть? Запрос в студию.
     
  5. slavak78

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

    С нами с:
    16 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    karakh

    запрос:
    $ria = db_query("SELECT * FROM albums WHERE glav_id='$id'"); //glav_id - это id владельца альбома
     
  6. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Бинго! Зачит у тебя в базе хранится id хозяина альбома. Значит, ты можешь вытащить его (поле glav_id) из результатов своего запроса. $row['glav_id'] или что-то в этом роде. Логично?
     
  7. slavak78

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

    С нами с:
    16 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    karakh
    Логично, но если в адресной строке подменить на id авторизованного пользователя, то этот же запрос вернет естественно, альбом авторизованного пользователя. Но поскольку id совпадает с pls, то и авторизованному пользователю открывается доступ к редактированию альбома, принадлежащего id.
     
  8. slavak78

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

    С нами с:
    16 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    karakh

    Спасибо большое, до меня дошло!
     
  9. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ты и тут Брут?