Веб-запросы по своей природе общедоступны. Им даже не нужно смотреть на исходный файл. Они могут просто отслеживать HTTP-запросы и воспроизводить их (это очень просто с помощью такого инструмента, как, например, fiddler).
Проблема с дросселированием
Дросселирующие решения действительно нежизнеспособны, хотя они снижают частоту атак. Проблема в том, что злоумышленник может написать сценарий, который выполняется в течение нескольких дней. Опять же, он может использовать прокси для отправки параллельных запросов. И если вы дросселируете для каждого имени пользователя, то противник может достичь DoS, пытаясь ввести ложный вход в систему на законных именах пользователей, и когда фактический пользователь пытается войти, он не будет знать, почему он заблокирован.
Решение
Типичный подход заключается в использовании одноразовых ключей. Это потребует некоторой дополнительной работы, но это уменьшит проблему, и это рекомендуется, только если вы действительно ожидаете нападения или что-то в этом роде. Упрощенная версия этого позволит клиенту передавать одноразовый ключ в качестве параметра запроса URI. Ключ выдается сервером клиенту в первую очередь. Как только запрос сделан, сервер проверяет, существует ли одноразовый ключ в базе данных, и разрешает запросы. Он немедленно удаляет одноразовый ключ, поэтому пользователь не может сделать еще один запрос с тем же одноразовым ключом, но тогда серверу потребуется выдать больше одноразовых ключей пользователю.
Упрощенное решение состоит в том, чтобы разрешать только аутентифицированным пользователям отправлять запросы веб-служб, но поскольку вы разрабатываете систему входа в систему, это, очевидно, не прилипает.
Я бы об этом не беспокоился, если бы у тебя не было противных противников.