Как я могу запретить кому-либо отправлять запросы на мой сервер?

#api #express #http #security #server

#API #экспресс #http #Безопасность #сервер

Вопрос:

Контекст:
Я написал простое приложение для опроса, используя стек PERN (Postgres, Express, ReactJS и NodeJS). Клиент отправляет запрос GET на сервер, который возвращает данные вопроса и отображает их пользователю. Затем пользователь выбирает вариант A или B. Затем это отправляется через POST-запрос на сервер, который затем запускает обновление базы данных.

Моя проблема в том, что любой может просмотреть НЕОБРАБОТАННЫЙ HTML-код клиента, просмотреть URL-адрес сервера и самостоятельно отправить запрос POST / GET в том же формате. Даже если бы я использовал токен аутентификации, наверняка кто-нибудь мог бы снова просмотреть НЕОБРАБОТАННЫЙ HTML, просмотреть запрос GET и сделать это самостоятельно?

Возможно, я здесь что-то упускаю, поэтому буду признателен за любую помощь.

Комментарии:

1. Невозможно предотвратить отправку других запросов на ваш сервер. Ваш сервер находится в Интернете. Любой может отправить на него. Обычное решение здесь заключается в том, что вам требуется некоторая форма учетных данных для входа в систему при каждом входящем запросе (кроме запросов на вход), и вы обнаруживаете серийное злоупотребление и блокируете учетную запись-нарушителя.

2. На самом деле это хороший вопрос. Мне любопытно, какие методы люди используют для запрета таких пакетов, как requests , которые дают злоумышленнику возможность довольно легко выполнять DOS-атаки.

3. @jfriend00 Я думаю, что это может быть ответом. Мой вопрос оттуда был бы таким: даже если мне потребуется аутентификация, наверняка любой может получить свой собственный токен и оттуда по-прежнему отправлять свои собственные запросы GET / POST.

4. @Mooncrater — Обычно можно реализовать ограничение скорости, чтобы один клиент не отправлял слишком много запросов. Это то, что делают большие мальчики, такие как Google.

5. @Mooncrater — Нет, ограничение на основе IP-адресов — это совсем не то, что я сказал. Если вы читали мои комментарии, я сказал, что вам требуется учетная запись в качестве учетных данных, и вы ограничиваете скорость всех обращений к этой учетной записи. DDOS — это большая тема, поскольку существует много типов атак, поэтому общего ответа нет — вам придется обсудить конкретный тип атаки. Некоторые средства защиты должны обрабатываться на сетевом уровне с помощью маршрутизаторов, брандмауэров и другой сетевой инфраструктуры, другие — на уровне приложений. DDOS — это не то, о чем этот вопрос. Если вы хотите задать более конкретный вопрос об этом, пожалуйста, напишите свой собственный вопрос.

Ответ №1:

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

Ограничение запросов / ограничение скорости

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

Аутентификация

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

Сетевой уровень

Вы можете отключить общедоступный доступ к своему серверу и разрешить отправлять запросы только определенным IP-адресам (белый список). Даже в этом случае вы не запрещаете отправлять запросы, вы просто игнорируете их. Другой способ — использовать поставщика CDN для защиты ваших сервисов от DDoS-атак.

Комментарии:

1. Спасибо за ответ. Я больше говорю с точки зрения безопасности. Я полагаю, вопрос должен быть таким: «Как я могу гарантировать, что сервер принимает только запросы от фактического клиента».

2. @Jambla Ну, если вопрос заключается в принятии , то часть аутентификации будет соответствовать потребностям.

3. @Jambla я понимаю ваше замешательство, но, как объяснил Эмад, невозможно сделать то, что вы просите. Лучший способ — это аутентификация, но люди ВСЕГДА могут перепроектировать код приложения, если они действительно этого хотят. вы должны убедиться, что злоумышленники НЕ МОГУТ сделать что-то неправильно на вашем сервере. Это лучше всего сделать с помощью аутентификации и авторизации (и всего остального в ответе Emad). Отличить ваше приложение от самозванца практически невозможно.