Я только что построил API в узле.
Я называю этот API в своем угловом приложении, чтобы делать основы, такие как логин и регистрация, например:
self.register = function(username, password) {
return $http.post(API + '/auth/register', {
username: username,
password: password
})
}
Поэтому мой вопрос в том, что любой может видеть этот URL-адрес API, поэтому то, что останавливает их от "избиения" его, чтобы создать пользователей там, будет. (Примечание API является константой в моем JS файле). То же самое касается входа в систему, что нужно, чтобы остановить кого-то из грубой силы, пытаясь использовать миллионы комбинаций имени пользователя и пароля.
И что бы вы порекомендовали в обеспечении этого?
Благодарю.
Вы можете использовать некоторую защиту DDoS, например, поставить прокси nginx перед вашим API nodejs и использовать, например, модуль limit_req
: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
Для грубой силы вы можете реализовать некоторую логику блокировки, которая после того, как количество ошибок будет блокировать учетную запись на некоторое время, например, 15-30 минут или даже потребует действия администратора.
Для API, требующих входа в систему, вы можете использовать защиту маркера. Маркер должен быть выпущен, когда API аутентификации вызывается и устанавливается через HTTP только защищенный cookie в ответ. Затем вы можете передать этот токен в заголовках запросов API и перед каждым выполнением каждого защищенного API в nodejs просто проверьте, действительно ли он действителен и отклоняет вызов, если это не так.
Вы спрашиваете о нарушении регистрации и защите входа, в основном:
К счастью, это в основном решенные проблемы.
Чтобы избежать регистрации "избиения", вам необходимо нарушить автоматизацию. Это может быть достигнуто различными подходами: от свободного до строгого:
Что приятно в этом, так это то, что 1-3 - это задачи, которые можно легко выгружать в современный брандмауэр веб-приложений без какого-либо дополнительного серверного кодирования или дополнительной нагрузки.
Для "защиты входа" в дополнение к вышеупомянутым методам 1-3 есть еще два, которые рекомендуются:
Двухфакторная аутентификация (2FA). Это в основном означает, что в дополнение к его "регулярному" паролю пользователю необходимо ввести еще один токен аутентификации. Этот токен может быть сгенерирован TOTP (см. Google Authenticator) или код, отправленный сервером через SMS, электронную почту, телефонный звонок и т.д.
Ключи API. Это считается более безопасным, поскольку API-ключи обычно представляют собой очень длинные уникальные строки, которые имеют очень хорошую энтропию (по сравнению с коммандами user/pass). Подробнее о API-ключах здесь.
Прежде чем я пойду, небольшое замечание: я видел некоторые предыдущие комментарии, относящиеся к DDoS, и я не могу подчеркнуть это достаточно - ВЫ НЕ МОЖЕТЕ СМЯГЧИТЬ DDOS ПО САМОУБЛЮДЕНИЮ. Но это для другой темы.
Удачи!
+1 на scareddragon.
Если вы живете в облаке, есть лучшая, облачная альтернатива использованию nginx - использование облачного WAF (брандмауэра веб-приложений) в качестве уровня смягчения DDoS. Например, проверьте Incapsula и CloudFlare.
Если DDoS вызывает у вас серьезную озабоченность и вы готовы платить за защиту от этого, это одна из проблем, которые я определенно оставил бы перед экспертами.