ограничить доступ к колбе REST API - PullRequest
0 голосов
/ 13 января 2019

Я построил API get REST в python с флягой. Я звоню по этому API со своего собственного сайта и хотел бы, чтобы другие сайты не использовали его.

Для этого в заголовке определения API я установил

'Access-Control-Allow-Origin' = '****'

будучи **** доменом веб-сайта, которому разрешено совершать вызов.

Этого достаточно, чтобы другие не использовали мой API?

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Лучший способ сделать CORS во фляге

Я бы, вероятно, использовал Flask-CORS, чтобы добавить в ваш проект Flask адаптируемую возможность совместного использования ресурсов Cross Origin ...

Первый пункт установки Flask-CORS:

pip install -U flask-cors

и затем внедрите в ваше приложение:

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
cors = CORS(app, resources={r"/api/*": {"origins": "example.com"}})

Это позволит получить доступ к этому конкретному маршруту только с сайта example.com и работать со всеми заголовками для вас, аналогично тому, что советовал Авиан, но в стиле Flasky. Конечно, если вы хотите, чтобы конкретный источник (или вообще любой источник) имел доступ к вашему полному API (или части вашего API), вы можете использовать подстановочные знаки.

Этого достаточно, чтобы другие не использовали мой API?

Нет, это только остановит людей от доступа к вашему API с какого-либо другого веб-сайта / источника с использованием JS. Это не помешает людям просто получить прямой доступ к вашему API, используя CuRL или эквивалентный. Если вы хотите запретить доступ к своему API, вам следует внедрить некоторую форму учетных данных авторизации токена / ключа, чтобы аутентифицировать только тех пользователей, которым вы хотите получить доступ, и вернуть «Несанкционированный» 401 всем пользователям без действительных учетных данных.

0 голосов
/ 15 января 2019

CORS

Я построил API get REST в python с флягой. Я вызываю этот API со своего собственного веб-сайта и хотел бы, чтобы другие веб-сайты не использовали его.

Рекомендация Роберта Путта по использованию пакета Flask CORS является правильной для решения этой проблемы, но он сам отметил, что это не помешает другим использовать ваш API, что приведет нас к вашему следующему вопросу, который я попробую обратиться более подробно.

API Злоупотребление

Этого достаточно, чтобы другие не использовали мой API?

Краткий ответ - НЕТ, потому что ваш API можно использовать многими другими способами, например, с помощью Postman, автоматических скриптов или с помощью ботов, и это лишь некоторые из них.

Обычными шагами для защиты API является использование секретов в форме токенов, таких как ключ API для идентификации того, что выполняет запросы, так называемое веб-приложение или мобильное приложение, и токен аутентификации пользователя для идентификации пользователя, выполняющего запрос, но оба они обречены на то, чтобы их можно было легко извлечь из их первоначального объема использования и использовать взломщиками вместо этого в автоматизированных сценариях или вручную в таких инструментах, как Postman. Это легко сделать на устройствах, которые злоумышленник контролирует, но это также можно сделать с помощью бесплатных wifi-порталов, работающих на ноутбуке злоумышленника. Когда злоумышленники используют метод бесплатного портала Wi-Fi в аэропортах, на железнодорожных / автобусных станциях и в других общественных местах, они обманом заставляют пользователя установить собственный сертификат, который позволит ему расшифровывать все соединения https, таким образом получая доступ к своим токенам, таким образом возможность выполнять вызовы к серверу API от их имени и без их ведома, и это будет сделано, когда пользователь сможет нормально просматривать сайт.

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

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

0 голосов
/ 14 января 2019

Да, убедитесь, что вы указали его в правильном формате.

«Access-Control-Allow-Origin»: «https://example.com",

Это разрешит только запросы от example.com.

Что касается вашего второго вопроса, если кто-то еще использует или может отправить запрос с mydomain.com, тогда, конечно, он сможет использовать ваш API. Я настоятельно рекомендую реализовать защиту CSRF с помощью Flask-WTF, если вы действительно беспокоитесь о других, использующих ваш API - поэтому никто не может подделывать запросы.

...