Предположим, у меня есть небольшой веб-сайт, на котором пользователи могут делать публичные рецензии.Итак, в коде сервера у нас есть что-то вроде этого:
// Get user's read books.
public IHttpActionResult GetBooks()
{
var user = GetLoggedUser();
var userBooks = BooksRepository.GetByUserId(user.Id);
return Ok({
Name: user.Name,
Books: userBooks.ToDtoList()
});
}
public IHttpActionResult GetReviews(int bookId)
{
var reviews = ReviewsRepository.GetByBookId(bookId);
return Ok({
Reviews: reviews.ToDtoList()
});
}
Помимо прочего, объекты обзора имеют свойство ID (целое число), то есть их идентификатор в базе данных.Теперь давайте предположим, что я злонамеренный пользователь, я вхожу в систему и затем начинаю делать что-то вроде:
let limit = 100;
for (let id = someStart; id < (someStart + limit); id++) {
fetch(URL + '/reviews?bookId=' + id)
.then( /* getting other users' reviews... */ );
}
Чтобы избежать этой ситуации, вместо использования целых чисел, я видел людей, использующих GUID какпервичный ключ их таблиц.Базы данных как-то упорядочивают GUID внутри, чтобы они могли создавать индекс?Если нет, разве это не медленный подход?Есть ли лучший способ обработки идентификаторов, отправленных в браузер?