Практический пример: API OpenAI

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

Введение:

За последние несколько месяцев все мы стали свидетелями множества приложений, которые используют API-интерфейсы OpenAI, чтобы попытаться имитировать функции, предлагаемые ChatGPT. Есть сотни приложений (по крайней мере, в AppStore), которые имеют свою версию ChatGPT, но есть ОДНО. БОЛЬШОЙ. ПРОБЛЕМА.

Проблема:

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

Видишь, к чему я клоню?

Любой, у кого есть базовые знания об использовании прокси, может (и будет) получить свой ключ API за считанные секунды, и прежде чем разработчик узнает об этом, он может проснуться с сотнями/тысячами $$$, испарившимися со своих счетов.

Кто-то может подумать: «Хорошо, давайте использовать закрепление SSL, чтобы убедиться, что связь остается конфиденциальной и поддерживается целостность данных», но это не так просто, поскольку OpenAI не предлагает доступ к своим сертификатам (на момент написания этой статьи).

Хотите попробовать сами?

  1. Найдите ChatGPT в AppStore/PlayStore и загрузите несколько приложений.
  2. Настройте Proxyman/Charles или любой другой прокси на телефоне и ноутбуке.
  3. Ищите запросы с таргетингом на https://api.openai.com
  4. Проверьте заголовки на что-то вроде:
'Authorization': `Bearer ${apiKey}`

Поздравляю! Теперь у вас есть доступ к рабочему ключу API, и вы можете использовать его по своему усмотрению*.

*Шучу. Пожалуйста, не используйте ключи API других людей без их разрешения, даже если они были настолько невежественны, что представили их в виде обычного текста.

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

Решение: