AWS API-шлюз ограниченный доступ только с веб-страницы S3 c - PullRequest
1 голос
/ 02 февраля 2020

У меня сервер Node.js express развернут на AWS EBS, клиентская сторона, написанная на React, развернута на S3 bucket как stati c веб-страница.

Я я работаю в какой-либо системе регистрации в конкретном c сервисе, и я не хочу запрашивать учетные данные у пользователя, поэтому я предполагаю, что csrf \ jwt не будет работать.

Есть ли в любом случае заблокировать все http-запросы от источника, отличного от клиента? прямо сейчас, есть вероятность, что кто-то просто использует Postman и отправляет запросы на мой сервер, например, создает пользователя с помощью только электронной почты.

Я пытался использовать закрытый API-шлюз, но не смог найти способ пусть клиент делает запросы успешно. Я думал о шифровании полезных данных http-запросов, но не нашел способа сохранить закрытый ключ, который никому не виден через браузер ...

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Источник - это просто HTTP-заголовок, который кто-то может установить, то есть «подделать», в своих запросах Postman. Вы можете проверить источник, чтобы заблокировать случайных ботов сканера, но он не будет блокировать кого-либо, кто определен. Поэтому, пожалуйста, не путайте это с фактической безопасностью. Это можно сделать с помощью AWS брандмауэра веб-приложений, подключенного к вашему балансировщику нагрузки EB, или просто добавив проверку в промежуточное ПО express, как в другом ответе.

Что касается частного API-шлюза, это никогда не сработает в этом сценарии это относится только к ресурсам внутри сети VP C, а ваше приложение React работает в веб-браузерах пользователей в общедоступных c Inte rnet.

относительно того, кто создает учетную запись пользователя. "только с электронной почтой" , которая находится на вашем рассмотрении, вы должны полностью проверить запрос на стороне сервера, зная, что запрос, возможно, пришел от кого-то, использующего такой инструмент, как Postman, поскольку существует нет способа полностью предотвратить это в вашем сценарии.

Если вы хотите использовать для этого API-шлюз, вы можете попробовать реализовать подтверждение запроса . Вы также можете подключить брандмауэр веб-приложений к шлюзу API. Я полагаю, что вы также можете выполнить проверку заголовка источника как часть средства проверки запросов к шлюзу API.

1 голос
/ 02 февраля 2020

Вы не можете заблокировать все HTTP запросы, но, безусловно, можете отклонить, добавив middleware

app.use((req, res, next) => {
  if(req.protocol === 'http' && req.hostname!== <client domain>){
    return res.sendStatus(403);
  } next();
})
...