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

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

API ที่แซนด์บ็อกซ์มีข้อดีหลัก 3 ข้อ ได้แก่

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

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

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

โปรเจ็กต์ 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 ได้ที่นี่

  • อธิบายเกี่ยวกับ API ที่แซนด์บ็อกซ์ - อธิบาย API ที่แซนด์บ็อกซ์ (SAPI) และแนวคิดหลักของ API นั้นๆ

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

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

  • ตัวแปร — พูดคุยเกี่ยวกับการใช้ SAPI ประเภทที่จำเป็นเมื่อส่งตัวชี้ไปยังประเภทอย่างง่ายและบล็อกหน่วยความจำ

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

อภิธานศัพท์

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

การมีส่วนร่วมใน API ที่แซนด์บ็อกซ์

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

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