Обычно вы хотите либо.) Скрыть идентификаторы, либо b.) Ограничить идентификаторы, которые может просматривать пользователь.
Для достижения первого вы можете сгенерировать случайный хеш для каждой записи в базе данных, который намного длиннее идентификатора и очень трудно угадать (hash('sha512', time() + $row['id'])
). Вы можете использовать эти уникальные хеши вместо идентификаторов в ссылках.
Другой подход в значительной степени зависит от вашего приложения: вы можете отслеживать идентификаторы, которые вы предоставили пользователю в сеансе, и отклонить запрос страницы (отправить ответ HTTP 403 ), если идентификатор был нет в его списке. Однако злоумышленник может сначала вызвать другие страницы (если это возможно в вашем приложении), чтобы заполнить этот список ссылок в своем сеансе.
В любом случае, вам не гарантирован успех, но вы можете сделать атаку намного сложнее.
Единственный способ достижения вашей цели - заставить своих пользователей войти в систему и решить, кто может видеть, какой объект для каждого пользователя (опять же, если это возможно в вашем приложении).