Sandboxed API là gì?

Dự án API Hộp cát (SAPI) nguồn mở được xây dựng dựa trên dự án nguồn mở Sandbox2 của Google và nhằm giảm bớt gánh nặng của việc tạo hộp cát của thư viện C/C++.

Hộp cát API mang lại 3 lợi ích chính:

  • Thay vì tạo hộp cát cho toàn bộ chương trình hoặc phải thay đổi mã nguồn để có thể tạo hộp cát cho một phần của chương trình như với Sandbox2, thì với SAPI, bạn có thể tạo hộp cát cho các thư viện C/C++ riêng lẻ. Do đó, với SAPI, chương trình chính sẽ được tách riêng khỏi các lỗ hổng thực thi mã trong thư viện C/C++.

  • Phương châm hoạt động của chúng tôi là: Hộp cát một lần, sử dụng mọi nơi. Bạn có thể dễ dàng sử dụng lại hộp cát thư viện bằng API Hộp cát, giúp giảm tải cho các dự án trong tương lai. Trước khi có API Hộp cát, các hộp cát có thể sử dụng tại Google yêu cầu phải thực hiện thêm thao tác triển khai với mỗi thực thể mới của dự án dự định tạo hộp cát, ngay cả khi sử dụng lại cùng một thư viện phần mềm. Các chính sách Sandbox2 và các hạn chế khác áp dụng cho quy trình trong hộp cát phải được triển khai lại mỗi lần, đồng thời các cơ chế trao đổi dữ liệu giữa các phần mã đáng tin cậy và không đáng tin cậy của mã phải được thiết kế từ đầu.

  • Mỗi thư viện SAPI sử dụng một chính sách bảo mật được xác định chặt chẽ, trái ngược với dự án hộp cát điển hình, nơi chính sách bảo mật phải bao gồm tổng mức sử dụng lệnh gọi hệ thống/tài nguyên của tất cả các thư viện đã sử dụng.

Dự án SAPI do các thành viên của Nhóm Google Sandbox thiết kế, và duy trì. Công cụ này cũng sử dụng Sandbox2 đã qua thử nghiệm trường của chúng tôi. Hiện tại, nhiều dự án nội bộ đang sử dụng SAPI để tách biệt khối lượng công việc sản xuất.

Bắt đầu nhanh

Để thiết lập và chạy API Hộp cát, hãy làm theo các bước sau:

  1. Cài đặt các phần phụ thuộc cần thiết (giả sử bạn đang chạy 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
  2. Sao chép và chạy bản dựng:
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build …
    
  3. Hãy thử một trong ví dụ:
    $ bazel run //sandboxed_api/examples/stringop:main_stringop
    

Tài liệu sẵn có

Bạn có thể xem thêm thông tin về Sandboxed API tại đây:

  • Giải thích về API Hộp cát – Mô tả API Hộp cát (SAPI) và các khái niệm cốt lõi của API này.

  • Bắt đầu — Cung cấp hướng dẫn giúp bạn tạo phiên bản API có hộp cát SAPI của riêng mình.

  • Quy tắc tạo bản dựng – Giải thích cách sử dụng quy tắc xây dựng sapi_library() để xây dựng Thư viện SAPI.

  • Biến – Thảo luận về việc sử dụng các loại SAPI cần thiết khi truyền con trỏ đến các loại đơn giản và các khối bộ nhớ.

  • Giao dịch – Giải thích cách sử dụng mô-đun Giao dịch SAPI để giám sát các lệnh gọi chức năng.

Bảng thuật ngữ

Sandbox2 Dự án nguồn mở của Google cung cấp lớp hộp cát trong SAPI.
Người đóng hộp cát Tệp nhị phân thực thi trong hộp cát Sandbox2, hãy xem tài liệu về Sandbox2. Trong ngữ cảnh của SAPI, đây là thư viện C/C++ có hộp cát.
API (SAPI) API Hộp cát, dự án nguồn mở của Google, cung cấp chức năng tạo Thư viện hộp cát.
Thư viện SAPI Thư viện do SAPI tạo, chứa Thư viện hộp cát, mã Sandbox2 và mã thời gian chạy SAPI.
Đối tượng SAPI Đối tượng C++ có trong Mã máy chủ lưu trữ, cung cấp giao diện cho Thư viện hộp cát bằng cách sử dụng các Loại SAPI thay vì các giao diện gốc.
Các loại SAPI SAPI cung cấp các loại đặc biệt cần thiết khi truyền con trỏ đến các loại và khối bộ nhớ đơn giản.
Giao dịch SAPI Một mô-đun dùng để quản lý trạng thái hộp cát của Thư viện hộp cát giữa các lần chạy.
Mã hạn chế RPC Mã giả lập giao tiếp của Lệnh gọi quy trình từ xa (RPC) được gói trong Sandbox2 và dùng để truyền dữ liệu giữa Đối tượng SAPI và Thư viện hộp cát.
Mã máy chủ lưu trữ Mã sử dụng Thư viện Hộp cát và bao gồm Đối tượng SAPI.

Đóng góp vào Sandboxed API

Nếu bạn muốn đóng góp, vui lòng đọc trang CONTRIBUTING.md rồi gửi yêu cầu lấy dữ liệu cho chúng tôi.Bạn cũng có thể báo cáo lỗi hoặc yêu cầu về tính năng của tệp.

Nếu muốn trò chuyện với nhà phát triển hoặc nhận thông báo về các bản cập nhật quan trọng của sản phẩm, bạn có thể tham gia Nhóm Google của chúng tôi: sandboxed-api-users.