Безопасность PHP при передаче MySQL Unique ID через Get - PullRequest
0 голосов
/ 05 августа 2009

Допустим, у меня есть веб-сайт со ссылками на различные книги на моей главной странице.

<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 является частью другого каталога, который я не показываю или не авторизую в этом разделе сайта. Поэтому, если пользователь щелкнул Книгу 3, а затем изменил id = 4 на id = 3, он мог бы просто просмотреть запись (при условии, что у меня нет надлежащей проверки сеанса).

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

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

Приветствия

Ответы [ 5 ]

1 голос
/ 05 августа 2009

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

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

1 голос
/ 05 августа 2009

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

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

0 голосов
/ 05 августа 2009

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

0 голосов
/ 05 августа 2009

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

  1. Вы можете сделать столбец в таблице mysql вашей книги, говоря "видимый" ... или уровень пользователя в таблицах пользователей.
  2. сделать php-функцию или оператор if:

    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 голосов
/ 05 августа 2009

Просто проверьте идентификатор, если он разрешен для отображения или нет.
Хорошая практика для get - это когда вы проверяете любые параметры, которые у вас есть.

...