Я хотел бы знать, возможно ли полностью блокировать запросы из внешних источников (созданные вручную сценарии, почтальон, программы типа LOIC и т. Д.) На сервере узлов с помощью Express.
Нет, это невозможно. Правильно сформированный запрос от почтальона или кодированный с помощью axios в node.js может выглядеть так, как если бы он исходил из браузера. Ваш сервер не будет знать разницу.
Обычная схема для API заключается в том, что вам нужны какие-то учетные данные разработчика, чтобы использовать ваш API. Вы применяете условия обслуживания к этим учетным данным, которые описывают, что разработчикам разрешено или не разрешено делать с вашим API.
Затем вы программно отслеживаете использование и замедляете или запрещаете любые учетные данные, которые неправильно используют API в соответствии с вашими условиями (именно так Google работает со своими API). Вы также можете внедрить ограничение скорости и другие средства защиты сервера, чтобы убогая учетная запись разработчика не могла нанести вред вашей службе. Вы можете даже занести в черный список IP-адреса, которые постоянно злоупотребляют вашим сервисом.
Для API, которые вы хотите использовать на своих собственных веб-страницах (для вызова Ajax), нет никакого реального способа не позволить другим использовать те же API программно. Вы можете отслеживать их использование и пытаться обнаружить использование, которое выходит за рамки того, что будут делать ваши собственные веб-страницы. Существуют также некоторые схемы, в которых вы размещаете уникальный токен короткого использования на своей веб-странице и требует, чтобы ваши веб-страницы включали токен в каждый запрос API. С некоторыми усилиями умные разработчики могут обойти эту проблему, регулярно удаляя токен с вашей веб-страницы, а затем используя его программно до истечения срока его действия. Но для вора API это дополнительное препятствие.
Как только вы определили обидчика, вы можете заблокировать его IP-адрес. Если они оказываются в более крупной сети (например, в университете), их общедоступный IP-адрес может быть разделен многими через NAT, и вы можете заблокировать гораздо больше пользователей, чем вы хотите - это всего лишь следствие блокировки IP-адреса это может делиться многими пользователями.