Content Security Policy

אם אתם לא מכירים את Content Security Policy (CSP), מומלץ להתחיל במאמר מבוא למדיניות בנושא אבטחת תוכן. במסמך הזה מתוארות התצוגה הרחבה של פלטפורמת האינטרנט של CSP. הפריסה של CSP באפליקציות ל-Chrome לא גמישה.

CSP היא מדיניות שמיועדת להתמודדות עם בעיות של יצירת סקריפטים חוצי-אתרים, וכולנו יודעים שכתיבת סקריפטים חוצת-אתרים היא בעייתית. אנחנו לא ננסה לשכנע אתכם שמדיניות CSP היא מדיניות חדשה וחמימה. המשימה כרוכה בעבודה; עליך ללמוד איך לבצע משימות בסיסיות בצורה שונה.

מטרת המסמך הזה היא להסביר בדיוק מהי המדיניות של CSP באפליקציות Chrome, מה צריך לעשות כדי לעמוד בה, ואיך אפשר עדיין לבצע את המשימות הבסיסיות האלה באופן שתואם ל-CSP.

מה ה-CSP באפליקציות Chrome?

מדיניות אבטחת התוכן של אפליקציות Chrome מגבילה את הפעולות הבאות:

  • לא ניתן להשתמש בסקריפטים מוטבעים בדפים של אפליקציית Chrome. ההגבלה אוסרת על השימוש בחסימות של <script> וגם על הגורמים המטפלים באירועים (<button onclick="...">).
  • לא ניתן להפנות למשאבים חיצוניים באף אחד מקובצי האפליקציה (מלבד משאבי וידאו ואודיו). לא ניתן להטמיע משאבים חיצוניים ב-iframe.
  • לא ניתן להשתמש בשיטות של מחרוזת ל-JavaScript כמו eval() ו-new Function().

ההטמעה מתבצעת באמצעות ערך המדיניות הבא:

default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' data: 'unsafe-inline';
img-src 'self' data:;
frame-src 'self' data:;
font-src 'self' data:;
media-src * data: blob: filesystem:;

אפליקציית Chrome יכולה להפנות רק לסקריפטים ולאובייקטים באפליקציה, מלבד קובצי מדיה (אפליקציות יכולות להפנות לווידאו ולאודיו מחוץ לחבילה). תוספים ל-Chrome יאפשרו לכם לשנות את ברירת המחדל של מדיניות אבטחת התוכן, אבל אפליקציות Chrome לא יעשו זאת.

איך לפעול בהתאם ל-CSP

כל ה-JavaScript וכל המשאבים צריכים להיות מקומיים (הכול נארז באפליקציה של Chrome).

"אבל אז איך אני..."

ייתכן שאתם משתמשים בספריות של תבניות ורבות מהן לא יפעלו עם CSP. כדאי גם לגשת למשאבים חיצוניים באפליקציה (תמונות חיצוניות, תוכן מאתרים).

שימוש בספריות תבניות

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

יהיה עליכם להשתמש בהרצה בארגז חול כדי לבודד כל תוכן שתרצו לבצע לו הערכה. 'ארגז חול' מסיר את ה-CSP בתוכן שצוין. אם אתם רוצים להשתמש בממשקי ה-API העוצמתיים של Chrome באפליקציית Chrome, התוכן שבארגז החול לא יכול ליצור אינטראקציה ישירה עם ממשקי ה-API האלה (ראו תוכן מקומי של Sandbox).

גישה למשאבים מרוחקים

אתם יכולים לאחזר משאבים מרוחקים דרך XMLHttpRequest ולהציג אותם באמצעות כתובות ה-URL מסוג blob:, data: או filesystem: (פרטים נוספים בקטע איך מפנים למשאבים חיצוניים).

ניתן לטעון וידאו ואודיו משירותים מרוחקים כי יש להם התנהגות גיבוי טובה גם במצב אופליין או כשהחיבור לא יציב.

הטמעת תוכן מהאינטרנט

במקום להשתמש ב-iframe, אפשר לקרוא לכתובת URL חיצונית באמצעות תג WebView (מידע נוסף זמין במאמר הטמעה של דפי אינטרנט חיצוניים).