GET /api/order/98273потом просто меняет ID:
/api/order/98274и видит заказ другого клиента.
200 OK (application/json)
"orderId":98274,
"email":"vip.customer@corp.example",
"total":"12999.00",
"cardLast4":"7742"
}
Пользователь меняет числовой идентификатор в URL и получает чужие данные. Приложение не проверяет «а это вообще его ресурс?» — только то, что ресурс существует. Фикс — проверять владение.
GET /api/order/98273/api/order/98274Тест использует токен обычного пользователя и пытается прочитать заказ, принадлежащий другому пользователю. Ожидаем 403 / 404. Если 200 — билд стопаем.
#!/bin/bash
# idor-check.sh
TOKEN_USER_A="Bearer userA-token"
FOREIGN_ORDER_ID=98274
STATUS=$(curl -s -o /tmp/order.json -w "%{http_code}" \
-H "Authorization: $TOKEN_USER_A" \
"https://staging.example.internal/api/order/$FOREIGN_ORDER_ID")
if [ "$STATUS" = "200" ]; then
echo "[BLOCK] IDOR: пользователь читает чужой заказ ($FOREIGN_ORDER_ID)"
exit 1
fi
echo "[OK] Чужие объекты недоступны (HTTP $STATUS)"
exit 0
Это защищает личные данные клиентов и финансовую информацию.
Стандарт:доступ к объекту = проверка владения. Любой ресурс «по ID» обязан быть «по ID + текущий пользователь».