Я разработал API для получения всех данных.
На сайте нет системы регистрации пользователей или чего-либо еще, чтобы идентифицировать пользователя, делающего вызов API. Если бы я мог идентифицировать пользователя, делающего вызов, всякий раз, когда кто-то злоупотреблял или атаковал API, я мог даже запретить его IP.
Я собираюсь создать ключ API на основе IP-адреса или MAC-адреса пользователя, но безопасно ли это сделать? Любые другие предложения?
Во-первых, вы не получите MAC-адрес конечного пользователя. Даже если вы прочитаете MAC-адрес входящих пакетов, вы получите только MAC-адрес своего маршрутизатора (который вы определенно не хотите запрещать!)
Пользовательские IP-адреса довольно легко изменить и / или обмануть (например, вредоносное ПО или скомпрометированный Javascript). Блокировка тех, кто делает плохие запросы, по-прежнему является хорошей идеей, но вы определенно не хотите использовать их для аутентификации.
Вы должны рассмотреть почти все в HTTP-запросе (пути, заголовки и т. Д.), Управляемом хакером, и определенно не принимать решения по аутентификации, основанные исключительно на информации, содержащейся в нем.
Вы упомянули, что у вас есть PHP-сервер. Почему бы не создать систему для создания ключей API через это?
это абсолютно неправильно, вы не можете получить MAC-адрес пользователя, нет никакого способа от JS / PHP
у многих пользователей за NAT будет одинаковый IP-адрес для вас, поэтому вы не сможете их отличить
Вы говорите, что нет системы регистрации пользователей, то почему вы должны генерировать ключ API?
У вас не может быть обоих миров. Либо запросы анонимны, либо пользователь регистрируется, и в этом случае вы можете предоставить ключ API (лучше использовать HTTPS, чтобы ключи не были украдены) и, возможно, дальнейшее ограничение по диапазону IP-адресов в зависимости от вашего варианта использования.
Как ответили другие, MAC-адреса доступны только в одной физической сети. Они не проходят через маршрутизаторы, поэтому они не путешествуют по Интернету. У вас нет доступа к MAC-адресу пользователя вне вашей физической сети, если вы не написали собственное приложение, которое его собирает (и это может быть подделано).
IP-адреса могут быть динамическими, а некоторые люди используют IP-адреса на основе географии, интернет-провайдера, оператора или бизнеса. Кроме того, многие из нас могут легко изменить наш IP-адрес, поэтому управлять доступом по IP-адресу сложно.
Есть некоторые подводные камни, и для управления общедоступным API требуется дополнительное время. Вы должны быть готовы отключить IP-адрес или диапазон IP-адресов, несмотря на то, что вы можете блокировать невинных и устойчивых пользователей одновременно с нарушителями. Если ваше приложение бесплатное, оно может дать вам больше свободы, поскольку нет ожидаемого уровня обслуживания и контракта, но вы можете захотеть охранять себя юридическим соглашением.
Многие публичные API по-прежнему отслеживают IP-адрес и реализуют tarpits, чтобы просто замедлять запросы с любого IP-адреса, который, как представляется, злоупотребляет системой. Таким образом, законные пользователи с одного и того же IP-адреса могут продолжать работать, хотя и медленнее.
В общем, если ваш сервис достаточно популярен, что кто-то хочет его атаковать, это обычно хороший знак, поэтому не беспокойтесь об этом слишком рано, но держитесь впереди. Вы не хотите, чтобы причиной отказа вашего приложения было то, что пользователи устали ждать на медленном сервере.
Другим вариантом является регистрация пользователей, поэтому при обнаружении злоупотреблений вы можете блокировать учетные данные, а не IP-адрес.
Не рекомендуется запрещать IP-адрес по многим причинам. И вообще, хакер может подделывать IP-адреса, поэтому этот метод бесполезен.
Что вы можете сделать, это отключить вызовы API на основе IP. т.е. ограничить количество вызовов на IP в секунду.
Вы можете найти это полезным: http://blog.programmableweb.com/2007/04/02/12-ways-to-limit-an-api/