אם אתם לא מכירים את 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 יאפשרו לך להירגע ברירת המחדל של Content Security Policy; אפליקציות Chrome לא יוכלו.
איך לפעול בהתאם למדיניות CSP
כל JavaScript וכל המשאבים צריכים להיות מקומיים (כל מה שנארז באפליקציית Chrome).
"אבל איך אוכל..."
יכול להיות שאתם משתמשים בספריות ליצירת תבניות, ורבים מהן לא יפעלו עם CSP. מומלץ גם לגשת למשאבים חיצוניים באפליקציה (תמונות חיצוניות, תוכן מאתרים).
שימוש בספריות ליצירת תבניות
משתמשים בספרייה שיש בה תבניות שעברו הידור מראש, וזה הכול. עדיין תוכלו להשתמש בספרייה אין אפשרות של עיבוד מראש, אך היא תדרוש ממך עבודה נוספת וקיימות הגבלות.
יהיה עליך להשתמש בארגז חול (sandboxing) כדי לבודד תוכן שרוצים לבצע הערכה שלו לדברים נוספים. כשמשתמשים בארגז חול, המערכת מעלה את CSP בתוכן שציינתם. אם אתם רוצים להשתמש בגרסה החזקה מאוד של Chrome ממשקי API באפליקציית Chrome שלכם, התוכן שבארגז החול לא יכול לקיים אינטראקציה ישירה עם ממשקי ה-API האלה (ראו תוכן מקומי ב-Sandbox).
גישה למשאבים מרוחקים
אפשר לאחזר משאבים מרוחקים דרך XMLHttpRequest
ולהציג אותם דרך blob:
, data:
או
filesystem:
כתובות URL (מידע נוסף זמין במאמר הפניה למשאבים חיצוניים).
אפשר לטעון את הווידאו והאודיו מהשירותים המרוחקים כי יש להם התנהגות חזרה טובה כאשר כשאין חיבור לאינטרנט או אם החיבור לא יציב.
הטמעת תוכן אינטרנט
במקום להשתמש ב-iframe, אפשר לשלוח קריאה לכתובת URL חיצונית באמצעות תג WebView (מידע נוסף זמין בקטע הטמעה של: דפי אינטרנט חיצוניים).