Я занимаюсь разработкой API с использованием PHP, MySQL и Redis и хотел бы ограничить количество звонков. API находится за CloudFlare. Чтобы реализовать это, я буду увеличивать количество в час, которое каждый IP-адрес делает для определенного вызова в Redis, и сообщит об ошибке, если она превысит предел.
Однако я считаю, что столкнулся с проблемой подмены IP-адресов. Я знаю, что реальный клиент никогда не получит ответ, если он подделывает свой IP-адрес, но это может быть необязательно для вызова, такого как вызов создания учетной записи. Клиент может эффективно создать DoS-атаку, зарегистрировавшись на нескольких учетных записях с разными IP-адресами, избегая ограничения скорости. Это может привести к тому, что моя система будет отправлять большое количество приветственных писем (в результате чего мои серверы будут помечены как спам), и может помешать пользователям регистрироваться, если их учетная запись электронной почты была злонамеренно зарегистрирована. Как этого можно избежать?
Мои мысли:
HTTP_CF_CONNECTING_IP
заголовок?Спасибо за вашу помощь и предложения.
Обычно вы используете секретный токен (ключ API, учетные данные для входа в систему и т. Д.), Который идентифицирует пользователя и подсчитывает количество запросов для каждой учетной записи пользователя.
Поскольку вы пытаетесь ограничить запросы по IP, я предполагаю, что вы собираетесь создать «открытый» API, где любой может отправлять запросы также без аутентификации.
Термин * IP-спуфинг не является проблемой в этом случае. Это потому, что — если он не контролирует маршрутизацию между вашим сервером и Интернетом — злоумышленник-обманщик не получит ответ (как вы сказали). Но HTTP (S) передается по TCP, и для установления соединения TCP требуется, чтобы злоумышленник выполнил успешное рукопожатие, которое требует получения идентификатора соединения с сервера — это означает, что он должен получать ответы.
Страница Википедии протокола TCP может послужить хорошим внешним источником для начала: https://en.wikipedia.org/wiki/Transmission_Control_Protocol
Ты видишь IP-спуфинг не проблема Но вы должны понимать, что ограничение скорости по IP не является хорошим решением вообще. Это потому что:
Я настоятельно рекомендую вам использовать аутентификацию (вместе с SSL!)
и ограничить количество запросов для каждого пользователя.
Коротко ответы на перечисленные вопросы (можете объяснить больше, если хотите)
Предотвращает ли SSL эту форму подмены IP-адресов?
нет
Есть ли способ убедиться, что клиент получает ответ сервера, тем самым гарантируя, что это не поддельный IP-адрес?
Да, это реализовано в TCP -> см. ACK
в ссылке в википедии выше
Проверяет ли cloudflare, что IP-адрес не подделан при передаче заголовка HTTP_CF_CONNECTING_IP?
Как объяснено выше. HTTP-трафик требует установленного TCP-соединения. Поэтому это не имеет смысла.
Предотвращает ли SSL эту форму подмены IP-адресов?
Он предотвращает атаки «Человек посередине» (MitM) только потому, что спуфер не может легко расшифровать сообщения.
Есть ли способ убедиться, что клиент получает ответ сервера,
тем самым гарантируя, что это не поддельный IP-адрес?
Защитные механизмы
Во-первых, убедитесь, что ваш брандмауэр и маршрутизаторы настроены правильно и ограничивают продвижение поддельного трафика из Интернета. — Смотрите больше на:
Проверяет ли cloudflare, что IP-адрес не был подделан, когда
передать заголовок HTTP_CF_CONNECTING_IP?
Вы не можете действительно проверить IP-адрес, если у вас нет специального оборудования, как указано в статье выше, в котором используются ACL.
Надеюсь, это поможет.