Моето приложение (най-вече код от страна на клиента, написан в гръбнак) взаимодейства със сървър Node.js. Единствената цел на моя сървър е да предоставя крайни точки на API за моето основно приложение.
GET
заявките са доста безопасни, нападателите не могат да направят много тук. Но имам няколко POST и PUT заявки. Една от PUT
заявките е отговорна за актуализиране на броя на гласовете за определен потребител, напр.
app.put('/api/vote`, function(req, res) {
// POST form data from the client
var winningPerson = req.body.winner; // userID
var losingPerson = req.body.loser; // userID
}
Забелязах, че някои хора просто изпращаха PUT
заявки за конкретен потребител чрез JS конзола или някакъв вид REST API конзола, заобикаляйки намерението на приложението, наложено от потребителския интерфейс. Ако трябваше да използвате това приложение по предназначение, то никога няма да ви позволи да гласувате за един и същи човек няколко пъти подред, да не говорим за произволен потребител от базата данни (ако приемем, че знаете неговия потребителски идентификатор).
Но да, да, знам: „Не се доверявайте на клиента“. И така, как мога да поправя горния проблем? Ще помогне ли някаква проверка на IP адрес тук, за да се предотврати многократно гласуване в рамките на 3-5 минути? Какво мога да направя, за да забраня достъпа до моя API от конзолата, така че потребителите да не могат произволно да гласуват за когото желаят, а вместо това да гласуват само като щракнат върху изображение с мишката или най-малкото да гласуват от конзолата само за тези двама души, а не за всеки произволен човек?