Сначала заявите о своих намерениях в robots.txt
.
Затем отправьте заголовок Set-Cookie с одноразовым номером или каким-то уникальным идентификатором на главной странице, но не в ваших ответах API. Если файл cookie никогда не отправляется на вашу конечную точку API, верните ответ 401 Bad Request
, потому что это бот, очень сломанный браузер или кто-то отклоняет ваши файлы cookie. Заголовок Referer также можно использовать в качестве дополнительной проверки, но подделать его тривиально. Отслеживайте, сколько вызовов API было сделано с этим идентификатором. Вы также можете сопоставить идентификаторы с IP-адресами. Если оно превысит ваш порог, ответьте ответом 403 Forbidden
. Сделайте свой порог достаточно высоким, чтобы законные пользователи не попали под него.
Ведите хорошие журналы и выделите ответы 401 и 403.
Реально, если кто-то определится достаточно, он сможет сбросить эту информацию. Ваша цель не должна состоять в том, чтобы сделать это невозможным, потому что вы никогда не добьетесь успеха. (См. Все обычные изречения о достижении идеальной безопасности.) Вместо этого вы хотите совершенно четко заявить, что:
- Такое поведение нарушает условия обслуживания.
- Вы активно пытаетесь предотвратить это.
- Вы знаете, что преступник существует и примерно кто он.
- Страшные адвокаты могут начать вмешиваться, если это продолжится.
(у вас есть адвокат, верно?)
Чтобы добиться этого, убедитесь, что тело вашего ответа 403 Forbidden
передает страшно звучащее сообщение в виде строки "Этот запрос превышает максимально допустимое использование API. Ваш IP-адрес был зарегистрирован. Пожалуйста, ознакомьтесь с условиями обслуживания и подчиняются директивам в robots.txt
. "
IANAL, но я полагаю, что DMCA можно будет применить в этой ситуации, если вы заявите об авторских правах на вашу базу данных. По сути, это означает, что если вы можете отследить незаконное использование вашего API на IP-адресе, вы можете отправить настиграмму своему провайдеру. Конечно, это всегда должно быть последним средством.
Я не поощряю использование назначенных API-ключей / токенов, потому что они становятся барьером для принятия и своего рода болью в шее, с которой приходится справляться. В качестве контраргумента ответа @ womp, Google постепенно отходит от их использования. Кроме того, я не думаю, что они на самом деле применимы в этом случае, потому что похоже, что ваш «API» больше похож на вызов JSON, который используется в основном на вашем собственном сайте.