2015-09-26 10 views
4

Я разрабатываю проект своего веб-сайта на основе NodeJs/Express, а для некоторых частей пользовательского интерфейса я использую JQuery ajax для получения вторичных данных.NodeJS/express - безопасность для общедоступной конечной точки API

Как мы можем справиться с базовым элементом управления нашими конечными точками API-интерфейса Restore, которые используются для вызовов ajax браузером? Я думал о какой-то авторизации токенов, но его могут также использовать другие клиенты (скрипты и т. Д.) После его перехвата, так как мы можем защитить наш сервер от нежелательных запросов? Какие другие элементы управления следует использовать в этих случаях (распознавать слишком много запросов от одного и того же клиента, черный список клиентов и т. Д.)?

ответ

8

Существуют три основные темы: Аутентификация, Авторизация, Безопасность. Я дам ссылки и только короткие ответы. Предмет достаточно большой, чтобы написать несколько книг.

Аутентификация - кто тот, кто делает запрос. Существует много «стратегий» для пользователя аутентификации. Пожалуйста, проверьте большинство модулярных модулей: http://passportjs.org/docs.

Конечно, вы можете реализовать одну или несколько из этих стратегий самостоятельно.

Для аутентификации без гражданства jwt-токены очень удобны. Если вы хотите сами его закодировать (у Паспорта есть эта стратегия), проверьте эту ссылку (один из многих в сети) .

Как предотвратить перехват токенов? Всегда используйте https и время истечения срока действия токена.

Где хранить вашу сторону клиента-маркера? для подробного ознакомления с этим https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ Короче не храните в веб-хранилище из-за атак XSS. Используйте куки, когда они правильно настроены, они безопасны (больше в прикрепленной ссылке), если они не настроены, они очень подвержены угрозам.

Авторизация: мы знаем пользователя, но у него есть доступ только к некоторым ресурсам. Пожалуйста, проверьте https://github.com/OptimalBits/node_acl Существует сущность с node_acl и паспорт: https://gist.github.com/danwit/e0a7c5ad57c9ce5659d2 В коротком паспорте аутентифицировать пользователя. Теперь мы хотим чего. Мы настраиваем роли и ресурсы и определяем отношение ролей и ресурсов. Затем мы устанавливаем для каждой роли пользователя. Модуль проверяет для нас разрешение пользователя.

Безопасность: ознакомьтесь с этой темой в документации на паруса фреймворка http://sailsjs.org/documentation/concepts/security, где описаны атаки и способы их предотвращения. Я пишу об экспресс:

DDOS: (часть вашего вопроса «слишком много запросов от того же клиента») «На уровне API не так много, что можно сделать на пути предотвращения». Это больше всего подходит администраторам серверов. Вкратце используйте балансировщик нагрузки. Если это один IP (не сотни), то черный список или ответ делей (для начала посмотрите на это https://www.npmjs.com/package/delayed-request, но я считаю, что это решение должно быть более сложным).

CSRF: «тип атаки, который заставляет конечного пользователя выполнять нежелательные действия на сервере веб-приложений». Посмотрите на этот модуль https://www.npmjs.com/package/csrf

XSS: «Тип атаки, в которой вредоносный агент управляет внедрением JavaScript на стороне клиента на ваш сайт», не доверяет никаким данным от пользователя. Всегда проверяйте, фильтруйте, сантизируйте. Посмотрите на это

В документации парусов существует больше типов атак, но выше всего популярны.

+0

Итак, если наши страницы являются общедоступными, не требуя какой-либо аутентификации пользователей, нет способа предотвратить внешний вызов REST API? – MQ87

+0

«общедоступный» означает открытый для всех, что значит «внешний» вызов тогда, для вас? –

+0

Используется за пределами контекста веб-сайта, так что, скажем, не из кода, написанного от меня. – MQ87

0

Использование экспресс-сессии + паспорт (http://passportjs.org/) В принципе, у вас должен быть вход на веб-сайт, и только аутентифицированные пользователи могут вызвать REST apis. теперь ... если вам не нужен логин, чем вы не можете действительно защитить API, поскольку дизайн сайта открыт. Вы не указали много информации, поэтому трудно сказать больше.

Также DoS-атаки не могут быть защищены вашим кодом, и обычно это не ответственность сервера приложений (в вашем случае node.js express) для обеспечения такой защиты. Если кто-то хочет, чтобы ваш сайт был удален, делая DoS-атаки, чем без других слоев (см. https://en.wikipedia.org/wiki/Denial-of-service_attack#Defense_techniques), которые в основном означают, что это до маршрутизатора/коммутатора/так далее ... для реализации.