Логика извлечения кода, раскрытая в официальной документации по безопасности Cursor

Инфраструктурная безопасность

Мы полагаемся на следующие субпроцессоры, перечисленные в порядке убывания критичности. Обратите внимание, что данные кода загружаются на наши серверы для поддержки Курсор и все функции искусственного интеллекта (см. Компонент запроса искусственного интеллекта), а в режиме конфиденциальности кодовые данные пользователя не сохраняются (подробнее см. Гарантия режима конфиденциальности (Частично).

Включен режим конфиденциальности (нажмите, чтобы узнать, как режим конфиденциальности влияет на передачу кодовых данных)

  • AWS Смотрите данные о коде: наша инфраструктура в основном размещается на AWS. Большинство серверов расположены в США, а некоторые серверы, чувствительные к задержкам, - в регионах AWS в Азии (Токио) и Европе (Лондон).
  • Фейерверк См. данные кода: Мы размещаем пользовательские модели на серверах Fireworks в США, Азии (Токио) и Европе (Лондон). Если режим конфиденциальности не включен, Fireworks может хранить некоторые данные кода, чтобы ускорить вывод модели.
  • OpenAI См. данные кода: мы полагаемся на многие модели OpenAI для предоставления ответов ИИ. Запросы могут отправляться в OpenAI, даже если в чате выбрана модель Anthropic (или другая) (например, для обобщения). У нас есть соглашение с OpenAI о нулевом хранении данных.
  • Антропология Смотрите данные кода: мы опираемся на множество Антропология У нас есть соглашение с Anthropic о нулевом хранении данных. Запросы могут быть отправлены в Anthropic, даже если в чате выбрана модель OpenAI (или другая) (например, для подведения итогов) У нас есть соглашение с Anthropic о нулевом хранении данных.
  • Google Cloud Vertex API Смотрите данные кода: мы опираемся на некоторые данные, предоставленные Google Cloud Близнецы модель для предоставления ответа ИИ. Запросы могут отправляться к Google Cloud Vertex API, даже если в чате выбрана модель OpenAI (или другая) (например, для подведения итогов).
  • Турбопауза Хранение обфусцированных кодовых данных: вкрапления проиндексированных кодовых баз и метаданные (обфусцированные имена файлов), связанные с вкраплениями, хранятся на Turbopuffer в облаке Google Cloud, расположенном в США. Более подробную информацию об обфусцированных кодовых данных вы можете найти в разделе Страница безопасности турбопаффера Подробнее. Пользователи могут отключить индексирование кодовой базы; подробности см. в этом документе Указатель кодовой базы Часть.
  • Exa ответить пением SerpApi См. раздел "Поисковые запросы (которые могут исходить из данных кода)": для функциональности веб-поиска. Поисковые запросы могут исходить из данных кода (например, при использовании "@web" в чате отдельная языковая модель определяет, что искать на основе ваших сообщений, истории сеансов и текущих документов, и Exa/SerpApi видит сгенерированный поисковый запрос).
  • MongoDB Невидимые данные кода: Мы используем MongoDB для хранения некоторых аналитических данных для пользователей, у которых не включен режим конфиденциальности.
  • Databricks Нет доступа к данным кода: мы используем Databricks MosaicML для обучения некоторых пользовательских моделей. Пользовательские данные модели конфиденциальности не передаются в Databricks.
  • Литейный цех Нет доступа к данным кода: мы используем Foundry для обучения некоторых пользовательских моделей. Данные пользователя в режиме конфиденциальности не передаются в Foundry.
  • Slack Нет доступа к данным кода: Мы используем Slack в качестве средства внутренней коммуникации. Во внутренних чатах могут быть отправлены фрагменты подсказок для пользователей, не являющихся частными лицами, в целях отладки.
  • Рабочее пространство Google Нет доступа к данным кода: мы используем Google Workspace для совместной работы. Во внутренней электронной почте могут быть отправлены фрагменты подсказок для отладки для пользователей, не являющихся частными лицами.
  • Pinecone Нет доступа к данным кода: встроенные и метаданные для проиндексированных документов хранятся в Pinecone. эти документы берутся из публичной сети. В настоящее время мы переносим их в Turbopuffer.
  • Амплитуда Нет доступа к данным кода: мы используем Amplitude для анализа некоторых данных; в Amplitude не хранятся данные кода; записываются только данные о событиях, например, количество "запросов вкладки курсора".
  • HashiCorp Нет доступа к кодовым данным: для управления инфраструктурой мы используем HashiCorp Terraform.
  • Полоска Нет доступа к закодированным данным: мы используем Stripe для обработки счетов. Stripe хранит ваши личные данные (имя, кредитная карта, адрес).
  • Версель Нет доступа к кодовым данным: Мы используем Vercel для развертывания сайта. Сайт не имеет доступа к кодовым данным.
  • WorkOS Нет доступа к кодовым данным: мы используем WorkOS для аутентификации. WorkOS может хранить некоторые личные данные (имя, адрес электронной почты).

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

Мы следуем принципу наименьших привилегий при назначении доступа к инфраструктуре и внедряем многофакторную аутентификацию для AWS. Мы ограничиваем доступ к ресурсам с помощью средств контроля на уровне сети и управления секретами.

Безопасность клиентов

Cursor - это проект с открытым исходным кодом, поддерживаемый Microsoft. Код Visual Studio (VS Code), филиал компании Microsoft. Страница безопасности GitHub о выпуске бюллетеней безопасности. После каждого второго крупного выпуска VS Code мы будем публиковать обновления ‘microsoft/vscode’ Кодовая база объединяется в Cursor. Вы можете узнать версию VS Code, на которой основана ваша версия Cursor, нажав "Cursor > О Cursor" в приложении. Если в вышестоящей версии VS Code есть серьезное исправление безопасности, мы выберем это исправление до следующего слияния и выпустим его немедленно.

Мы используем ToDesktop для распространения наших приложений и выполнения автоматических обновлений. Некоторые широко используемые приложения (такие как Линейный ответить пением ClickUp) также доверяют этой платформе.

Наше приложение отправляет запросы на следующие домены для связи с нашим бэкендом. Если вы используете корпоративный прокси-сервер, пожалуйста, внесите эти домены в белый список, чтобы убедиться, что Cursor работает правильно.

  • ‘api2.cursor.sh’: Используется для большинства API-запросов.
  • ‘api3.cursor.sh’: Для запросов на вкладку курсора (только HTTP/2).
  • ‘repo42.cursor.sh’: Для индексации кодовой базы (только HTTP/2).
  • ‘api4.cursor.sh’(математика) род‘us-asia.gcpp.cursor.sh’(математика) род‘us-eu.gcpp.cursor.sh’(математика) род‘us-only.gcpp.cursor.sh’: Используется для запросов вкладки курсора (только HTTP/2) в зависимости от вашего местоположения.
  • ‘marketplace.cursorapi.com’(математика) род‘cursor-cdn.com’: Используется для загрузки расширений из Extension Marketplace.
  • ‘download.todesktop.com’: Для проверки и загрузки обновлений.

Следует отметить одну особенность безопасности, которая отличается от VS Code:

  1. Workspace Trust По умолчанию в Cursor эта функция отключена. Вы можете установить ‘security.workspace.trust.enabled’ установленный на ‘true’ чтобы включить его. По умолчанию он отключен, чтобы избежать путаницы между "Ограниченным режимом" Workspace Trust и "Режимом конфиденциальности" Cursor, а также потому, что свойства доверия сложны и трудны для понимания (например, даже если Workspace Trust включен, вы не защищены от вредоносных расширений, только от вредоносных папок). Мы приветствуем мнение сообщества о том, следует ли включать Workspace Trust по умолчанию.

Запросы ИИ

Для обеспечения своей функциональности Cursor обращается к нашим серверам с запросами искусственного интеллекта. Эти запросы происходят по разным сценариям. Например, мы отправляем запрос ИИ, когда вы задаете вопрос в чате, мы отправляем запрос ИИ каждый раз, когда вы набираете текст, чтобы вкладка Cursor могла делать для вас предложения, а также мы можем отправлять запрос ИИ в фоновом режиме для создания контекста или поиска ошибок, чтобы предупредить вас.

Запросы ИИ обычно содержат контекстную информацию, такую как недавно просмотренные документы, журналы диалогов и соответствующие фрагменты кода, основанные на информации языкового сервера. Эти данные о коде отправляются в нашу инфраструктуру на базе AWS, а затем передаются соответствующему провайдеру вывода языковой модели (Fireworks/OpenAI/Anthropic/Google). Обратите внимание, что даже если вы зададите в настройках собственный ключ API OpenAI, запрос всегда будет сначала доставлен в нашу инфраструктуру на AWS.

На данный момент мы не поддерживаем прямое подключение приложения Cursor к корпоративному развертыванию OpenAI/Azure/Anthropic, поскольку наши сборки реплик выполняются на серверах, а пользовательские модели на Fireworks очень важны для обеспечения хорошего пользовательского опыта. Мы пока не предлагаем вариант самостоятельного развертывания на сервере.

Весь код, созданный Cursor, принадлежит вам.

Указатель кодовой базы

Cursor позволяет семантически индексировать кодовую базу, что дает возможность отвечать на вопросы в контексте всей кодовой базы и писать более качественный код, ссылаясь на существующие реализации. Индексирование кодовой базы включено по умолчанию, но может быть отключено в процессе загрузки или в настройках.

Наша функция индексирования кодовой базы работает следующим образом: когда она включена, она сканирует папки, открытые в Cursor, и вычисляет дерево Меркла из хэшей всех файлов.‘.gitignore’ возможно ‘.cursorignore’ Файлы и подкаталоги, указанные в дереве Merkle, игнорируются. Затем дерево Меркла синхронизируется с сервером. Каждые 10 минут хэш проверяется на совпадения, и дерево Меркла используется для определения измененных файлов и загрузки только этих файлов.

На нашем сервере мы разбиваем и встраиваем файлы и храним их в Турбопауза в. Чтобы результаты поиска векторов можно было фильтровать по пути к файлу, мы храним обфусцированный относительный путь к файлу для каждого вектора, а также диапазон строк, соответствующий чанку. Мы также индексируем вкрапления по хэшу чанка в кэше AWS, чтобы обеспечить более быстрое индексирование одной и той же кодовой базы во второй раз (это особенно полезно для команд).

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

Несколько заметок:

  • несмотря на то, что ‘.cursorignore’ Файлы можно не индексировать, но они все равно могут быть включены в запросы AI, например, если вы недавно просматривали файл и затем задали вопрос в чате. Мы рассматриваем возможность добавления ‘.cursorban’ чтобы справиться со сценариями, когда вы хотите предотвратить отправку файла в любом запросе - если вы заинтересованы в этой возможности, напишите на форумах или через hi@cursor.com Свяжитесь с нами.
  • Детали обфускации путей к файлам: пути передаются через ‘/’ ответить пением ‘.’ Разделите и зашифруйте каждый фрагмент с помощью ключа, хранящегося на клиенте, и детерминированного короткого 6-байтового случайного числа. При этом происходит утечка некоторой информации об иерархии каталогов и возникают некоторые конфликты случайных чисел, но большая часть информации скрывается.
  • Обратное встраивание: Академические исследования показали, что в некоторых случаях встраивание можно обратить. Текущая атака основана на доступе к модели и встраивании коротких строк в большие векторы, что заставляет нас полагать, что осуществить эту атаку в данном контексте сложнее. Однако если противник проникнет в нашу базу данных векторов, он может обладать некоторыми знаниями об индексированной кодовой базе.
  • Если в Git-репозитории включена индексация кодовой базы, мы также индексируем историю Git. В частности, мы храним SHA-файлы коммитов, информацию о родителях и обфусцированные имена файлов (как описано выше). Чтобы обеспечить совместное использование структур данных в одном Git-репозитории и в одной команде, ключ для обфускации имен файлов извлекается из хэша последних коммитов. Сообщения коммитов, содержимое или различия файлов не индексируются.
  • Наша функция индексирования обычно находится под высокой нагрузкой, что может привести к сбою многих запросов. Это означает, что иногда файлы приходится загружать несколько раз, прежде чем они будут полностью проиндексированы. Одним из проявлений этой проблемы является то, что если вы посмотрите на ‘repo42.cursor.sh’ сетевого трафика и может превысить ожидаемое использование полосы пропускания.
© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...