2009-08-05 5 views
0

Допустим, у меня есть сайт со ссылками на различные книги на моей главной странице.Безопасность PHP при передаче уникального идентификатора MySQL через Get

<a href='books.php?id=1'>Book 1</a> 
<a href='books.php?id=2'>Book 2</a> 
<a href='books.php?id=4'>Book 3</a> 

Книги 1-3 в моей системе, однако ID = 3 является исключением из другого catelog, что я не показываю или дающий этот раздел сайта. Поэтому, если пользователь нажал кнопку «Книга 3», затем изменил id = 4 на id = 3, они могли просто потянуть запись (при условии, что у меня нет правильной проверки сеанса).

Есть ли способ скрывать идентификатор get, который вы передаете, пытаясь вытащить определенную запись? кажется, что при прохождении только id было бы легко запросить страницы, которые без надлежащего запроса и проверки сеанса могли бы получить другой результат.

Есть ли лучший способ сделать это?

Приветствия

ответ

1

Необходимо всегда следить за тем, чтобы пользователь мог получить доступ к странице. Это единственный способ проверить, что вы не показываете неверные данные, потому что кто-то всегда может изменить ссылку, на которую они идут, даже если вы ее каким-то образом скроете.

Этого просто не избежать. Вам всегда нужно проверить доступ к записи.

0

Просто проверьте идентификатор, если это допустимо, чтобы отобразить или нет.
С хорошей практикой, когда вы проверяете все параметры, которые у вас есть.

1

Возможно, вы можете использовать хеш-код или что-то, используя md5 или что-то еще, что затрудняет ввод вручную, но это действительно не очень хорошая идея.

Что вы должны сделать, это реализовать защиту на стороне сервера в вашем сценарии books.php, который предотвратит несанкционированный доступ пользователей. Это единственное, что защитит ваш сайт.

0

просто мысли вслух:

  1. вы можете сделать столбец в вашей книге тузда таблице говоря «видимый» ... или userlevel в таблицах пользователей.
  2. сделать функцию PHP или если утверждение, что:

    if (user is not in user_level) // user is not allowed to see everything 
    { 
        redirect to previous page; 
    } 
    else if (user is in user_level) // user is allowed to see everything 
    {   
        display all items; 
    } 
    
0

Вам обязательно нужно проверить, разрешено ли пользователю для просмотра страницы.
Но что, если вы разделили идентификаторы для разных каталогов? URL-адрес может выглядеть как books.php? Cat = foo & id = 1. Это не обязательно сделает вещи более безопасными, но это помешает людям случайно найти неправильные страницы и организовать вещи немного лучше.

Смежные вопросы