#javascript #node.js
#javascript #node.js
Вопрос:
У меня есть конечная точка contact us в моем Nodejs, которая получает FormData из интерфейса и сохраняет FormData в моей базе данных. Если кто-то использует приложение, такое как postman или что-то еще, может настроить таргетинг на мою конечную точку, отправив несколько запросов с одинаковыми FormData! У меня нет аутентификации в моем приложении, поэтому я не могу поставить перед ним никаких условий.
router.post("/", upload.none(), async (req, res) => {
console.log("req", req.body);
if (!req.body) {
res.send({ success: false, msg: "Cannot send blank message!" });
return;
}
let body = JSON.parse(req.body.contact);
if (!body.email || !body.message || !body.subject) {
res.send({ success: false, msg: "Mandatory fields are not filled!" });
return;
}
try {
await getDb("messages").insertOne({
name: body.name,
email: body.email,
phone: body.phone,
subject: body.subject,
message: body.message,
});
res.send(
JSON.stringify({
success: true,
msg: "Message has been sent successfully",
})
);
} catch (err) {
console.log(err);
res.send(JSON.stringify({ success: false, msg: err }));
}
});
export default router;
Комментарии:
1. Вам нужно было бы сохранить некоторое состояние о человеке, отправившем форму, например, объект со списком IP-адресов (или реальную базу данных, если вы хотите, чтобы она сохранялась). Когда данные пользователя успешно добавлены в базу данных, сохраните ключ в объекте у этого пользователя. Перед вызовом обязательно проверьте, успешно ли они отправили данные
insertOne
. Не слишком безумно.2. Спасибо за ответ, я планировал отделить серверную часть от интерфейса, с этой идеей я не уверен, получу ли я IP от node, это даст мой IP-адрес интерфейса или пользователя ip? возможно, мне потребуется исключить свой IP-адрес интерфейса, верно?