Как защитить запрос от изменения?
Решение очень простое
Создаем две функции: cryptID и decryptID, которые шифруют и дешифруют ID. Пользователю отдаем зашифрованный ID, типа:data-id="wallId_G5ht3Q"
Далее когда пользователь отправляет запрос, получаем G5ht3Q, расшифровываем его, и проверяем, существует ли запись с таким ID
если это только гет - то пусть гетит себе на здоровье. С лимитом на запросы, не более 20 в минуту, например. А на update-delete-create, конечно, проверка прав и CSRF.