Скрытие URL-адресов API и предотвращение грубых атак

0

Я только что построил API в узле.

Я называю этот API в своем угловом приложении, чтобы делать основы, такие как логин и регистрация, например:

self.register = function(username, password) {
  return $http.post(API + '/auth/register', {
      username: username,
      password: password
    })
}

Поэтому мой вопрос в том, что любой может видеть этот URL-адрес API, поэтому то, что останавливает их от "избиения" его, чтобы создать пользователей там, будет. (Примечание API является константой в моем JS файле). То же самое касается входа в систему, что нужно, чтобы остановить кого-то из грубой силы, пытаясь использовать миллионы комбинаций имени пользователя и пароля.

И что бы вы порекомендовали в обеспечении этого?

Благодарю.

Теги:
security

3 ответа

4

Вы можете использовать некоторую защиту 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
    Также, если вы используете Express с Node.js, рассмотрите модули Helmet ( github.com/helmetjs/helmet ) или Lusca ( github.com/krakenjs/lusca ). это поможет защитить заголовки HTTP запросов.
1

Вы спрашиваете о нарушении регистрации и защите входа, в основном:

  1. Как уменьшить автоматизацию создания аккаунта?
  2. Как смягчить угадывание пользователя/пароля?

К счастью, это в основном решенные проблемы.

Чтобы избежать регистрации "избиения", вам необходимо нарушить автоматизацию. Это может быть достигнуто различными подходами: от свободного до строгого:

  1. Если API предназначен только для доступа к конкретному приложению/браузеру, вы можете отфильтровать всех других посетителей
  2. Регистрация предельных значений по сеансу /IP
  3. Требовать прохождения CAPTCHA
  4. Подтвердить адрес электронной почты
  5. Требовать конфиденциальную конфиденциальность в качестве подтверждения личности (например, номер телефона, кредитную карту)

Что приятно в этом, так это то, что 1-3 - это задачи, которые можно легко выгружать в современный брандмауэр веб-приложений без какого-либо дополнительного серверного кодирования или дополнительной нагрузки.

Для "защиты входа" в дополнение к вышеупомянутым методам 1-3 есть еще два, которые рекомендуются:

  1. Двухфакторная аутентификация (2FA). Это в основном означает, что в дополнение к его "регулярному" паролю пользователю необходимо ввести еще один токен аутентификации. Этот токен может быть сгенерирован TOTP (см. Google Authenticator) или код, отправленный сервером через SMS, электронную почту, телефонный звонок и т.д.

  2. Ключи API. Это считается более безопасным, поскольку API-ключи обычно представляют собой очень длинные уникальные строки, которые имеют очень хорошую энтропию (по сравнению с коммандами user/pass). Подробнее о API-ключах здесь.

Прежде чем я пойду, небольшое замечание: я видел некоторые предыдущие комментарии, относящиеся к DDoS, и я не могу подчеркнуть это достаточно - ВЫ НЕ МОЖЕТЕ СМЯГЧИТЬ DDOS ПО САМОУБЛЮДЕНИЮ. Но это для другой темы.

Удачи!

1

+1 на scareddragon.

Если вы живете в облаке, есть лучшая, облачная альтернатива использованию nginx - использование облачного WAF (брандмауэра веб-приложений) в качестве уровня смягчения DDoS. Например, проверьте Incapsula и CloudFlare.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню