Правильный дизайн для API, чтобы предотвратить публичный доступ при использовании с AJAX - PullRequest
0 голосов
/ 13 декабря 2018

Я разрабатываю небольшой API для своего приложения.Моя цель - разрешить внешним доменам запрашивать API с помощью запроса POST, который, как я ожидаю, чаще всего будет выполняться через клиентский протокол, такой как AJAX.

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

Моей первой мыслью было сохранение таблицы ключей для моих пользователей.Я бы потребовал предоставить ключ при доступе к моему API;этот ключ будет проверяться по моей таблице авторизованных ключей во время каждого запроса API, и запрос будет выполняться только в случае обнаружения совпадения.Но это было бы небезопасно: так как большинство пользователей получат доступ к моему API через протокол на стороне клиента, такой как AJAX, их код предоставит ключ, который может быть присвоен злоумышленником.

Моя вторая мысль былахранить таблицу ключей и рефереров.Каждый авторизованный реферер будет иметь свой уникальный ключ.Когда пользователь пытался получить доступ к моему API с помощью своего секретного ключа, я извлекал HTTP_REFERER этого пользователя и проверял, чтобы соответствующий домен соответствовал предоставленному ключу.Тем не менее, это также можно использовать: злоумышленник может легко использовать cUrl, чтобы подделать реферер и использовать систему.

Есть ли способ создать безопасный API, к которому могут обращаться только авторизованные пользователи, но к которым обращаютсячерез клиентский протокол, такой как AJAX?

1 Ответ

0 голосов
/ 13 декабря 2018

Есть ли способ создать безопасный API, который может быть доступен только авторизованным пользователям, но доступен через клиентский протокол, такой как AJAX?

Короткий ответ - НЕТпри условии, что вы имеете в виду только вызовы, сделанные из кода JavaScript.

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

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

...