O que é a API no modo sandbox?
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
O projeto de API no modo sandbox de código aberto (SAPI) é baseado no projeto de código aberto Sandbox2 do Google e tem como objetivo facilitar o uso de sandbox em bibliotecas C/C++.
A API no modo sandbox oferece três benefícios principais:
Em vez de colocar programas inteiros em sandbox ou ter que mudar o código-fonte para
colocar uma parte de um programa em sandbox, como no Sandbox2, com a SAPI você pode
colocar bibliotecas individuais de C/C++ em sandbox. Como resultado, com a SAPI, o programa principal
fica isolado de vulnerabilidades de execução de código na biblioteca C/C++.
Nosso lema de trabalho é: Crie um sandbox uma vez, use em qualquer lugar. As bibliotecas em sandbox com a API Sandboxed podem ser reutilizadas com facilidade, o que elimina a necessidade de projetos futuros. Antes da API Sandboxed, as caixas de isolamento disponíveis para uso no Google
exigiam trabalho de implementação adicional com cada nova instância de um projeto
que deveria ser isolado, mesmo que reutilizasse a mesma biblioteca
de software. As políticas do Sandbox2 e outras restrições aplicadas ao processo em sandbox precisavam ser reimplementadas a cada vez, e os mecanismos de troca de dados entre partes confiáveis e não confiáveis do código precisavam ser projetados do zero.
Cada biblioteca SAPI usa uma política de segurança bem definida, ao contrário do projeto em sandbox típico, em que as políticas de segurança precisam cobrir a pegada total de syscall/recurso de todas as bibliotecas usadas.
O projeto SAPI foi projetado, desenvolvido e é mantido por membros da equipe do Google Sandbox. Ele também usa o Sandbox2, que já foi testado em campo. Atualmente, muitos projetos internos estão
usando a SAPI para isolar as cargas de trabalho de produção.
Início rápido
Para começar a usar a API Sandboxed, siga estas etapas:
- Instale as dependências necessárias (isso pressupõe que você está executando o Debian 10
Buster):
$ echo "deb http://storage.googleapis.com/bazel-apt stable jdk1.8" |
sudo tee /etc/apt/sources.list.d/bazel.list
$ wget -qO - https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install -qy build-essential linux-libc-dev bazel python3
python3-pip libclang-7-dev
$ pip3 install clang
- Clone e execute a build:
$ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
$ bazel build …
- Teste um dos exemplos:
$ bazel run //sandboxed_api/examples/stringop:main_stringop
Documentação disponível
Saiba mais sobre a API em sandbox:
Explicação da API em sandbox: descreve a API em sandbox (SAPI) e os principais conceitos dela.
Começar: fornece orientações para criar sua própria versão em sandbox da SAPI de uma API.
Build Rules: explica como usar a regra de build sapi_library() para criar sua biblioteca SAPI.
Variáveis: discute o uso de tipos SAPI, que são necessários ao transmitir ponteiros para tipos simples e blocos de memória.
Transações: explica como usar o módulo de transações da SAPI para monitorar chamadas de função.
Glossário
Sandbox2 |
Projeto de código aberto do Google que fornece a camada de sandbox na SAPI. |
Sandboxee |
O binário em execução no sandbox do Sandbox2. Consulte a
documentação do Sandbox2.
No contexto da SAPI, essa é a biblioteca C/C++ em sandbox. |
SAPI |
API no modo sandbox, projeto de código aberto do Google que oferece a funcionalidade para criar
bibliotecas no modo sandbox. |
Biblioteca SAPI |
Biblioteca gerada pela SAPI, que contém a biblioteca em sandbox, o código do Sandbox2 e o código de tempo de execução da SAPI. |
Objeto SAPI |
Objeto C++, incluído no código do host, que fornece uma interface para a biblioteca
em sandbox usando tipos SAPI em vez dos originais. |
Tipos de SAPI |
A SAPI fornece tipos especiais necessários ao transmitir ponteiros para tipos simples e blocos de memória. |
Transação da SAPI |
Um módulo usado para gerenciar o status do sandbox da biblioteca em sandbox entre execuções. |
Stub RPC |
Stub de comunicação de chamada de procedimento remoto (RPC) encapsulado no Sandbox2 e usado para transmitir
dados entre o objeto SAPI e a biblioteca em sandbox. |
Código do host |
O código que usa a biblioteca em sandbox e inclui o objeto SAPI. |
Contribuir com a API Sandboxed
Se quiser contribuir, leia
CONTRIBUTING.md
e envie solicitações de pull.Você também pode relatar bugs ou enviar solicitações de recursos.
Se você quiser conversar com os desenvolvedores ou receber notificações sobre atualizações importantes do produto, participe do nosso grupo do Google: sandboxed-api-users.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-07-27 UTC."],[[["\u003cp\u003eSandboxed API (SAPI) enables the sandboxing of individual C/C++ libraries to isolate the main program from vulnerabilities, unlike traditional sandboxing methods that focus on entire programs or require source code changes.\u003c/p\u003e\n"],["\u003cp\u003eWith SAPI, sandboxed libraries can be easily reused, eliminating the need for redundant implementation work in future projects that leverage the same libraries.\u003c/p\u003e\n"],["\u003cp\u003eSAPI employs tightly defined security policies specific to each library, differing from typical sandboxing approaches that require broader policies covering the entire application's resource footprint.\u003c/p\u003e\n"],["\u003cp\u003eThe SAPI project is built on Google's open-source Sandbox2 and is actively used by internal Google projects for workload isolation.\u003c/p\u003e\n"],["\u003cp\u003eDevelopers can quickly get started with SAPI by installing dependencies, building the project from the GitHub repository, and exploring the provided examples.\u003c/p\u003e\n"]]],[],null,["# What is Sandboxed API?\n\nThe open-source Sandboxed API (**SAPI** ) project builds on top of Google's\n[Sandbox2](/code-sandboxing/sandbox2) open-source project and aims to make\nsandboxing of C/C++ libraries less burdensome.\n\nSandboxed API provides three main benefits:\n\n- Instead of sandboxing entire programs or having to change source code to be\n able to sandbox a part of a program as with Sandbox2, with SAPI you can\n sandbox individual C/C++ libraries. As a result, with SAPI the main program\n is isolated from code execution vulnerabilities in the C/C++ library.\n\n- Our working motto is: **Sandbox once, use anywhere.** Libraries sandboxed\n with Sandboxed API can be easily reused, which removes the burden for future\n projects. Before Sandboxed API, sandboxes available for use at Google\n required additional implementation work with each new instance of a project\n which was intended to be sandboxed, even if it reused the same software\n library. Sandbox2 policies and other restrictions applied to the sandboxed\n process had to be reimplemented each time, and data exchange mechanisms\n between trusted and untrusted parts of the code had to be designed from\n scratch.\n\n- Each SAPI library utilizes a tightly defined security policy, in contrast to\n the typical sandboxed project, where security policies must cover the total\n syscall/resource footprint of all utilized libraries.\n\nThe SAPI project has been designed, developed, and is maintained by members of\nthe Google Sandbox Team. It also uses our field-tested\n[Sandbox2](/code-sandboxing/sandbox2). Currently, many internal projects are\nusing SAPI to isolate their production workloads.\n\nQuick Start\n===========\n\nTo get up and running with Sandboxed API, follow these steps:\n\n1. Install the required dependencies (this assumes you are running Debian 10 Buster): \n\n ```bash\n $ echo \"deb http://storage.googleapis.com/bazel-apt stable jdk1.8\" | \n\n sudo tee /etc/apt/sources.list.d/bazel.list\n $ wget -qO - https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -\n $ sudo apt-get update\n $ sudo apt-get install -qy build-essential linux-libc-dev bazel python3 \n\n python3-pip libclang-7-dev\n $ pip3 install clang\n ```\n2. Clone and run the build: \n\n ```bash\n $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api\n $ bazel build …\n ```\n3. Try out one of the [examples](/code-sandboxing/sandboxed-api/examples): \n\n ```bash\n $ bazel run //sandboxed_api/examples/stringop:main_stringop\n ```\n\n| **Note:** For more detailed setup instructions and guidelines, see [Getting Started\n| with SAPI](/code-sandboxing/sandboxed-api).\n\nAvailable Documentation\n=======================\n\nMore information on Sandboxed API is available here:\n\n- [Sandboxed API Explained](/code-sandboxing/sandboxed-api/explained) ---\n Describes Sandboxed API (SAPI) and its core concepts.\n\n- [Getting Started](/code-sandboxing/sandboxed-api/getting-started) ---\n Provides guidance helping you create your own SAPI sandboxed version of an\n API.\n\n- [Build Rules](/code-sandboxing/sandboxed-api/build-rules) --- Explains\n how to use the sapi_library() build rule to build your SAPI Library.\n\n- [Variables](/code-sandboxing/sandboxed-api/variables) --- Discusses the\n use of SAPI Types which are needed when passing pointers to simple types and\n memory blocks.\n\n- [Transactions](/code-sandboxing/sandboxed-api/transactions) --- Explains\n how to use the SAPI Transaction module to monitor function calls.\n\nGlossary\n========\n\n|----------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [Sandbox2](/code-sandboxing/sandbox2) | Google open-source project which provides the sandboxing layer in SAPI. |\n| Sandboxee | The binary executing in the Sandbox2 sandbox, see the [Sandbox2 documentation](/code-sandboxing/sandbox2/explained#sandboxee). In the context of SAPI, this is the sandboxed C/C++ library. |\n| SAPI | Sandboxed API, Google open-source project which provides the functionality to build Sandboxed Libraries. |\n| SAPI Library | Library generated by SAPI, containing Sandboxed Library, Sandbox2 code, and SAPI runtime code. |\n| [SAPI Object](/code-sandboxing/sandboxed-api/explained#sapi_object_and_rpc_stub) | C++ object, included in the Host Code, providing an interface to the Sandboxed Library using SAPI Types instead of the original ones. |\n| [SAPI Types](/code-sandboxing/sandboxed-api/variables#sapi_types) | SAPI provides special types needed when passing pointers to simple types and memory blocks. |\n| [SAPI Transaction](/code-sandboxing/sandboxed-api/transactions#sapi_transaction) | A module used to manage the sandbox status of the Sandboxed Library between runs. |\n| [RPC Stub](/code-sandboxing/sandboxed-api/explained#sapi_object_and_rpc_stub) | Remote Procedure Call (RPC) communication stub wrapped in Sandbox2 and used to pass data between SAPI Object and Sandboxed Library. |\n| [Host Code](/code-sandboxing/sandboxed-api/explained#host_code) | The code which uses the Sandboxed Library and includes the SAPI Object. |\n\nContributing to Sandboxed API\n=============================\n\nIf you want to contribute, please read\n[CONTRIBUTING.md](https://github.com/google/sandboxed-api/blob/master/CONTRIBUTING.md)\nand send us pull requests.You can also report bugs or file feature requests.\n\nIf you'd like to talk to the developers or get notified about major product\nupdates, you may want to join our Google Group:\n[sandboxed-api-users](https://groups.google.com/g/sandboxed-api-users)."]]