Как логически организовать защиту от удаления чужих записей?
Привет!
Подскажите, пожалуйста, как обычно организовывается защита данных пользователей друг от друга?
Текущий пример-
Есть регистрация пользователей. У каждого есть свои записи в админке. Все сохранено в базе данных
Есть кнопка удаление записи.
Технически удаление записи происходит так:
JS скрипт берет ID удаляемой записи из верстки и отправляет его с помощью POST в PHP файл без перезагрузки страницы. Запись удалена.
Как можно "напакостить":
- В верстке вручную ставим любой ID записи и нажимаем удалить. И чужая запись удалена.
- Если сделать проверку ID пользователя + ID записи, совпадает = удаление. НО можно просто брутом через POST прогнать каждый ID пользователя и по 1000 записей по порядку. В итоге все равно будет попадание и записи удалятся.
Если придумывать генерацию пользователям и записям уникальные скрытые ключи и делать проверку на совпадение?
Однако, если пользователей сто тысяч, то наверняка будут совпадения в генераторе ключей и возникнет конфликт
Как обычно организовывают такие связи?
Мне бы просто логически понять.
В таких делах новичок.
У Вас на бэкэнде пользователь остаётся залогинен даже при POST запросах из JS. В запросах на удаление указывайте только ID удаляемой записи. При его обработке, на бэке, смотрите по залогиненому пользователю, принадлежит ли ему удаляемая запись. Если да - удаляйте, нет - возвращайте сообщение об ошибке.
Вот об этом и говорил.
На бекенде если сделать проверку пользователя + его или нет запись.
То можно по порядку сделать очень много запросов
ID user 1, удалить запись 1,2,3,4...1000
ID user 2, удалить запись 1,2,3,4...1000
Так Вы не передавайте ID юзера, а вытаскивайте его из сессии или восстанавливайте по токену. Зависит от того, как у вас авторизация устроена.
В таком случае злоумышленник сможет выполнить запрос на удаление чужой записи только если угонит сессию\токен жертвы. Чтобы себя обезопасить - используйте https.