מהו Sandboxed API?

פרויקט ה-API בקוד פתוח עם ארגז חול (SAPI) מבוסס על פרויקט הקוד הפתוח Sandbox2 של Google, ומטרתו להקל על יצירת ארגז חול לספריות C/C++.

ל-Sandboxed API יש שלושה יתרונות עיקריים:

  • במקום להפעיל ארגז חול לתוכניות שלמות או לשנות את קוד המקור כדי להפעיל ארגז חול לחלק מתוכנית, כמו ב-Sandbox2, עם SAPI אפשר להפעיל ארגז חול לספריות C/C++ ספציפיות. כתוצאה מכך, באמצעות SAPI התוכנית הראשית מבודדת מפגיעויות בביצוע קוד בספריית C/C++.

  • המוטו שלנו בעבודה הוא: Sandbox once, use anywhere (ארגז חול פעם אחת, שימוש בכל מקום). אפשר לעשות שימוש חוזר בקלות בספריות שנמצאות בארגז חול עם Sandboxed API, וכך להסיר את הנטל מפרויקטים עתידיים. לפני Sandboxed API, ארגזי חול שהיו זמינים לשימוש ב-Google דרשו עבודת הטמעה נוספת עם כל מופע חדש של פרויקט שהיה אמור להיות בארגז חול, גם אם נעשה בו שימוש חוזר באותה ספריית תוכנה. היה צריך להטמיע מחדש בכל פעם את המדיניות של Sandbox2 ומגבלות אחרות שחלות על התהליך ב-Sandbox, ולתכנן מאפס את מנגנוני חילופי הנתונים בין חלקים מהימנים ולא מהימנים בקוד.

  • כל ספריית SAPI משתמשת במדיניות אבטחה מוגדרת היטב, בניגוד לפרויקט ארגז חול טיפוסי, שבו מדיניות האבטחה צריכה לכסות את כל טביעת הרגל של קריאות המערכת או המשאבים של כל הספריות שבשימוש.

פרויקט 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. משכפלים ומריצים את ה-build:
    $ 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) והמושגים העיקריים שלו.

  • תחילת העבודה – במאמר הזה מוסבר איך ליצור גרסת Sandbox משלכם של SAPI של API.

  • Build Rules — Explains how to use the sapi_library() build rule to build your SAPI Library.

  • משתנים – הסבר על השימוש בסוגי SAPI שנדרשים כשמעבירים מצביעים לסוגים פשוטים ולבלוקים של זיכרון.

  • Transactions – הסבר על השימוש במודול Transaction של SAPI כדי לעקוב אחרי קריאות לפונקציות.

מילון מונחים

Sandbox2 פרויקט קוד פתוח של Google שמספק את שכבת הארגז החול ב-SAPI.
Sandboxee הקובץ הבינארי שמופעל בארגז החול Sandbox2, אפשר לעיין במסמכי התיעוד של Sandbox2. בהקשר של SAPI, מדובר בספריית C/C++ בסביבת ארגז חול.
SAPI Sandboxed API, פרויקט קוד פתוח של Google שמספק את הפונקציונליות לבניית Sandboxed Libraries.
ספריית SAPI ספרייה שנוצרה על ידי SAPI, שמכילה ספרייה בתוך ארגז חול, קוד Sandbox2 וקוד זמן ריצה של SAPI.
SAPI Object אובייקט C++, שכלול ב-Host Code, ומספק ממשק לספרייה ב-Sandbox באמצעות SAPI Types במקום המקוריות.
סוגי SAPI ‫SAPI מספק סוגים מיוחדים שנדרשים כשמעבירים מצביעים לסוגים פשוטים ולבלוקים של זיכרון.
SAPI Transaction מודול שמשמש לניהול סטטוס ארגז החול של הספרייה המוגנת בארגז חול בין הפעלות.
RPC Stub קובץ stub של תקשורת בקריאה לשירות מרוחק (RPC) שעטוף ב-Sandbox2 ומשמש להעברת נתונים בין אובייקט SAPI לבין ספרייה ב-Sandbox.
קוד המארח הקוד שמשתמש בספרייה עם ארגז חול וכולל את אובייקט ה-SAPI.

איך תורמים ל-Sandboxed API

אם אתם רוצים לתרום, אתם מוזמנים לקרוא את CONTRIBUTING.md ולשלוח לנו בקשות למשיכת קוד.אתם יכולים גם לדווח על באגים או לשלוח בקשות להוספת תכונות.

אם אתם רוצים לדבר עם המפתחים או לקבל הודעות על עדכוני מוצר חשובים, אתם יכולים להצטרף לקבוצת Google שלנו: sandboxed-api-users.