API แซนด์บ็อกซ์คืออะไร

โปรเจ็กต์ Sandboxed API (SAPI) แบบโอเพนซอร์สสร้างขึ้นบนโปรเจ็กต์โอเพนซอร์ส Sandbox2 ของ Google และมีเป้าหมายที่จะทำให้การแซนด์บ็อกซ์ไลบรารี C/C++ เป็นเรื่องง่ายขึ้น

Sandboxed API มีประโยชน์หลัก 3 ประการ ดังนี้

  • SAPI ช่วยให้คุณแซนด์บ็อกซ์ไลบรารี C/C++ แต่ละรายการได้ แทนที่จะต้องแซนด์บ็อกซ์ทั้งโปรแกรมหรือต้องเปลี่ยนซอร์สโค้ดเพื่อให้แซนด์บ็อกซ์ส่วนหนึ่งของโปรแกรมได้เหมือนกับ Sandbox2 ด้วยเหตุนี้ SAPI จึงช่วยแยกโปรแกรมหลัก ออกจากช่องโหว่ในการเรียกใช้โค้ดในไลบรารี C/C++

  • คติพจน์ในการทำงานของเราคือ Sandbox เพียงครั้งเดียว ใช้ได้ทุกที่ ไลบรารีที่แซนด์บ็อกซ์ ด้วย Sandboxed API สามารถนำกลับมาใช้ซ้ำได้ง่าย ซึ่งช่วยลดภาระสำหรับโปรเจ็กต์ในอนาคต ก่อนที่จะมี Sandboxed API แซนด์บ็อกซ์ที่พร้อมใช้งานใน Google ต้องมีการติดตั้งใช้งานเพิ่มเติมในแต่ละอินสแตนซ์ใหม่ของโปรเจ็กต์ ซึ่งตั้งใจให้เป็นแซนด์บ็อกซ์ แม้ว่าจะใช้ไลบรารีซอฟต์แวร์เดียวกันก็ตาม นโยบาย Sandbox2 และข้อจำกัดอื่นๆ ที่ใช้กับกระบวนการแซนด์บ็อกซ์ต้องได้รับการติดตั้งใช้งานใหม่ทุกครั้ง และต้องออกแบบกลไกการแลกเปลี่ยนข้อมูลระหว่างส่วนที่เชื่อถือได้และส่วนที่ไม่น่าเชื่อถือของโค้ดตั้งแต่ต้น

  • ไลบรารี SAPI แต่ละรายการใช้นโยบายความปลอดภัยที่กำหนดไว้อย่างเข้มงวด ซึ่งแตกต่างจาก โปรเจ็กต์แซนด์บ็อกซ์ทั่วไปที่นโยบายความปลอดภัยต้องครอบคลุมร่องรอย ของ Syscall/ทรัพยากรทั้งหมดของไลบรารีที่ใช้

โปรเจ็กต์ SAPI ได้รับการออกแบบ พัฒนา และดูแลโดยสมาชิกของ ทีม Google Sandbox นอกจากนี้ ยังใช้ Sandbox2 ที่ผ่านการทดสอบภาคสนามของเราด้วย ปัจจุบันโปรเจ็กต์ภายในหลายโปรเจ็กต์ ใช้ SAPI เพื่อแยกภาระงานในเวอร์ชันที่ใช้งานจริง

คู่มือเริ่มต้นฉบับย่อ

หากต้องการเริ่มต้นใช้งาน Sandboxed API ให้ทำตามขั้นตอนต่อไปนี้

  1. ติดตั้งการอ้างอิงที่จำเป็น (สมมติว่าคุณใช้ 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. โคลนและเรียกใช้บิลด์
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build 
  3. ลองใช้ตัวอย่างต่อไปนี้
    $ bazel run //sandboxed_api/examples/stringop:main_stringop

เอกสารที่มี

ดูข้อมูลเพิ่มเติมเกี่ยวกับ Sandboxed API ได้ที่นี่

  • คำอธิบายเกี่ยวกับ Sandboxed API — อธิบาย Sandboxed API (SAPI) และแนวคิดหลัก

  • การเริ่มต้นใช้งาน - ให้คำแนะนำในการสร้าง API เวอร์ชันแซนด์บ็อกซ์ของ SAPI ของคุณเอง

  • สร้างกฎ - อธิบาย วิธีใช้กฎการสร้าง sapi_library() เพื่อสร้างไลบรารี SAPI

  • ตัวแปร - อธิบายการใช้ประเภท SAPI ซึ่งจำเป็นเมื่อส่งพอยน์เตอร์ไปยังประเภทพื้นฐานและบล็อกหน่วยความจำ

  • ธุรกรรม — อธิบาย วิธีใช้โมดูลธุรกรรม SAPI เพื่อตรวจสอบการเรียกฟังก์ชัน

อภิธานศัพท์

Sandbox2 โปรเจ็กต์โอเพนซอร์สของ Google ซึ่งมีเลเยอร์แซนด์บ็อกซ์ใน SAPI
Sandboxee ไบนารีที่ดำเนินการในแซนด์บ็อกซ์ Sandbox2 โปรดดู เอกสารประกอบของ Sandbox2 ในบริบทของ SAPI นี่คือไลบรารี C/C++ ที่อยู่ในแซนด์บ็อกซ์
SAPI Sandboxed API ซึ่งเป็นโปรเจ็กต์โอเพนซอร์สของ Google ที่มีฟังก์ชันการทำงานในการสร้าง Sandboxed Libraries
ไลบรารี SAPI ไลบรารีที่สร้างโดย SAPI ซึ่งมีไลบรารีแซนด์บ็อกซ์ โค้ด Sandbox2 และโค้ดรันไทม์ SAPI
ออบเจ็กต์ SAPI ออบเจ็กต์ C++ ที่รวมอยู่ในโค้ดโฮสต์ ซึ่งมีอินเทอร์เฟซไปยังไลบรารีที่อยู่ในแซนด์บ็อกซ์ โดยใช้ประเภท SAPI แทนประเภทเดิม
ประเภท SAPI SAPI มีประเภทพิเศษที่จำเป็นเมื่อส่งพอยน์เตอร์ไปยังประเภทพื้นฐานและบล็อกหน่วยความจำ
ธุรกรรม SAPI โมดูลที่ใช้เพื่อจัดการสถานะแซนด์บ็อกซ์ของไลบรารีที่อยู่ในแซนด์บ็อกซ์ระหว่างการเรียกใช้
RPC Stub Stubs การสื่อสาร Remote Procedure Call (RPC) ที่ห่อหุ้มใน Sandbox2 และใช้เพื่อส่งข้อมูลระหว่างออบเจ็กต์ SAPI กับไลบรารีที่อยู่ในแซนด์บ็อกซ์
รหัสโฮสต์ โค้ดที่ใช้ Sandboxed Library และมีออบเจ็กต์ SAPI

การมีส่วนร่วมใน Sandboxed API

หากต้องการมีส่วนร่วม โปรดอ่าน CONTRIBUTING.md และส่งคำขอพุลมาให้เรา นอกจากนี้ คุณยังรายงานข้อบกพร่องหรือส่งคำขอฟีเจอร์ได้ด้วย

หากต้องการพูดคุยกับนักพัฒนาซอฟต์แวร์หรือรับการแจ้งเตือนเกี่ยวกับการอัปเดตผลิตภัณฑ์ที่สำคัญ คุณอาจต้องเข้าร่วมกลุ่ม Google sandboxed-api-users