Как сделать Node API доступным только через веб-приложение? - PullRequest
0 голосов
/ 03 июня 2018

Я занимаюсь разработкой веб-приложения с React и API-интерфейсом GraphQL с Node.js / Express.Я хотел бы сделать API более безопасным, чтобы было сложнее для запросов API, которые не приходят из веб-приложения в браузер для получения данных.Я знаю, как это сделать с зарегистрированными пользователями.Но как заставить незарегистрированного пользователя по-прежнему иметь доступ к некоторым базовым данным, необходимым для приложения?

Можно ли вставить какой-то ключ в веб-приложение, чтобы не было возможности вызова APIреплицируется для других через прослушивание сетевого инструмента разработчика в браузере и репликацию в Postman?Защищает ли SSL / TLS запросы в этом браузере?Или использовать как «обычный» пользователь для незарегистрированных посетителей?

Это серверное веб-приложение с next.js

Я знаю, что нет 100% безопасного API, но, возможно, его можно сделатьтруднее для несанкционированного доступа.

Редактировать: я не уверен, если это проблема CSRF, потому что речь идет не о доступе к пользовательским данным или изменении данных через вредоносные сайты и т. д. Но о других людях, пытающихся использовать сайтданные (все запросы GET к API) и может легко создать собственное веб-приложение поверх моего API.Поэтому никто не может легко запросить мой API через простые запросы почтальона.

1 Ответ

0 голосов
/ 14 июня 2018

Быстрый ответ: нет, вы не можете.

Если вы пытаетесь предотвратить то, что можно описать как законные пользователи, которые получают доступ к вашему API, вы не сможете этого сделать.они всегда могут подделать ту же логику и сначала попасть на вашу веб-страницу, прежде чем злоупотреблять API.если это то, что вы пытаетесь предотвратить, то лучше всего добавить ограничение скорости для API, чтобы один пользователь не делал слишком много запросов к вашему API (я являюсь автором ralphi и express-rate-limit очень популярен).

Но если вы на самом деле пытаетесь предотвратить вымывание вами другого сайта из формы и предоставление контента своим пользователям, это на самом деле легче решить.

Большинство браузеров отправляют Заголовок реферера с запросом, вы можете проверить этот заголовок и увидеть, что запросы на самом деле поступают от пользователей на вашем собственном сайте (этот метод называется Leech Protection).

Выщелачиваниесайт может попытаться прокси-запрос к вашему API, но, поскольку все они будут приходить с одного и того же IP-адреса, они будут ограничивать вашу скорость, и он сможет обслуживать только нескольких пользователей, прежде чем их заблокируют.

Единственное, что может сделать сайт Leecher, это попытаться кэшировать ваш api, чтобы ему не приходилось делать так много запросов.если это возможный случай, вы вернулись на круги своя, и вам может потребоваться вручную заблокировать его IP, как только вы заметите такое злоупотребление.Я также проверил бы, является ли это законным, потому что он может нарушать закон.

Другой вариант, похожий на Реферер, - это использование samesite куки.они будут отправлены, только если запрос поступает непосредственно с вашего сайта.они, вероятно, более надежны, чем Referrer, но не все браузеры действительно уважают их.

...