כאשר אתם משיקים ממשק משתמש מלוטש להצגת קבצי PDF, PPT או חשבוניות, אתם בדרך כלל מתמקדים באסתטיקה, בתגובתיות ובזמן הטעינה. מה שנשכח, עם זאת, הוא איך המסמכים עוברים מהשרת שלכם לדפדפן של המשתמש. טעות אחת יכולה להפוך יישום יציב למקור דליפת נתונים.
במדריך זה נעבור על שבע היכולות הממוקדות באבטחה שעליכם להטמיע—מוכנות לשימוש—כאשר משintegrים מציג מסמכים שמקפיד על פרטיות. רשימת הבדיקה נכתבה עבור מהנדסי פרונט‑אנד שרוצים לחזק את ההטמעות שלהם מבלי להוסיף מורכבות מיותרת.
1. הצפנה מקצה לקצה של זרם המסמך
למה זה חשוב
גם אם אתם מגישים קבצים דרך HTTPS, המסמך הגולמי יכול להיתפס על ידי תוסף דפדפן שנפגע או סקריפט זדוני שקורא את התגובה לפני שהיא מגיעה למציג.
איך ליישם
| שלב | פעולה |
|---|---|
| הצפנה בצד השרת | הצפנת הקובץ (AES‑256‑GCM היא בחירה יציבה) לפני האחסון או הזרמה. |
| אבטחת העברה | מסירת ה‑blob המוצפן דרך TLS 1.3. |
| פענוח בצד הלקוח | הפעלת Web Worker שמקבל את הזרם המוצפן, מפענח אותו בזיכרון, ומזין את הטקסט הפשוט ישירות לקנבס של המציג. |
| לעולם אל תחשוף את המפתח | שמור את מפתח הפענוח בטוקן קצר‑חיים שנוצר על ידי השרת (ראו תכונה #4). |
עד שהמציג מציג, המסמך מעולם לא נחשף בטקסט גלוי ברשת או בחוט הראשי.
2. רישום לבן רשימה של מדיניות‑אבטחת‑תוכן (CSP)
הסיכון
CSP רפויה מאפשרת לתוקף להזריק סקריפטים זדוניים או לטעון משאבים מזויפים שיכולים לקרוא את נתוני הקנבס של המציג.
נקודות מפתח
- ‘unsafe‑inline’ ו‑‘unsafe‑eval’ אסורים עבור סקריפטים.
- רק ה‑CDN של המציג (או חבילה מתארחת בעצמכם) מורשה לספק JavaScript.
- ה‑frames מוגבלים לדומיין המהימן של המציג.
CSP מחמירה מצמצמת באופן משמעותי את משטח ההתקפה של העמוד המארח את ההטמעה.
3. בידוד אותו‑מקור באמצעות ארגז חול iframe
למה ארגז חול?
גם עם CSP, עמוד שנפגע יכול לנסות להגיע אל ה‑DOM של המציג. <iframe> מבודד יוצר כלוב אבטחה שהעמוד המארח לא יכול לשבור ללא הרשאה מפורשת.
דגלי ארגז חול שיש להימנע מהם
allow-top-navigation– מונע מהמציג להשתלט על החלון ברמת העליונה.allow-popups– חוסם חלונות קופצים בלתי צפויים שיכולים לשמש לדיג פישינג.
אם המציג צריך לתקשר עם העמוד האב (למשל, לסנכרון UI), השתמשו ב‑postMessage עם בדיקת מקור מפורשת.
4. בקרת גישה מבוססת טוקן
הבעיה עם כתובות URL ישירות
כתובות URL ציבוריות וסטטיות מאפשרות לכל מי שיש ברשותו את הקישור להוריד את הקובץ לנצח.
מאחר שהטוקן נחתם בצד השרת, כל שינוי מבטל את הבקשה, והמציג מסרב לטעון.
5. סימון מים & שכבות דינמיות
מטרה
סימן מים דינמי בצד הלקוח מוסיף שכבת אחריות מבלי לשנות את הקובץ המקורי.
טיפים ליישום
- הציגו את סימן המים על שכבת קנבס שממוקמת מעל דפי ה‑PDF.
- השתמשו במייל של הסשן או ב‑UUID אקראי כך שכל מופע של המציג יהיה ייחודי.
- הפעילו/כבו את השכבה בעזרת דגל פשוט כדי לשמור על עומס ביצועים מינימלי.
אם מתגלה מסמך דולף, המזהה המוטמע מצביע ישירות על המקור.
6. הגבלות הורדה והדפסה
ברירות מחדל של הדפדפן
רוב הדפדפנים מציגים תפריט הקשר של לחיצה ימנית שיכול לשמור את הקנבס כתמונה, ובכך לייצא את העמוד.
מה מציג יכול ומה הוא לא יכול לעשות
SDK של מציג מסמכים יכול להסתיר פעולות ייצוא מסרגל הכלים, וקטלוג התכונות של Doconut מציין הדפסת דפדפן וייצוא PDF בין היכולות שהינכם בוחרים להציג. בדקו את שמות האפשרויות מול התיעוד של הגרסה שאתם מתקינים ולא מול כל מאמר, כולל זה: מפתחות הקונפיגורציה משתנים בין גרסאות.
החשוב יותר הוא החלק שאף הגדרת סרגל כלים אינה מכסה. הסתרת כפתור היא בחירת זרימת עבודה, לא בקרת גישה. השרת עדיין חייב לאשר כל בקשת עמוד, תמונה ממוזערת, ייצוא, הורדה והדפסה בעצמו, מכיוון שנקודות הקצה הללו ניתנות לקריאה ישירה. וברגע שהפיקסלים על המסך, קיימים צילומי מסך, מצלמות וכלי נגישות; מציג שמבטיח אחרת מוכר לכם משהו שהוא לא יכול לספק.
7. רישום ביקורת וקישורי אירועים
ערך של נראות
גם המציג המוקשח ביותר יכול לשמש לרעה. רישום של מי פתח איזה מסמך, מתי, ואילו פעולות בוצעו יוצר מסלול פורנזי.
עם יומנים בזמן אמת ניתן לזהות תבניות חריגות—כמו משתמש אחד הפותח עשרות קבצי PDF סודיים בשניות—ולגרום להתראות או לביטולים.
סיכום
הטמעת מציג מסמכים היא אחריות אבטחה, לא רק של ממשק משתמש. הצפנת זרם המסמך, Content‑Security‑Policy מחמירה, iframe sandbox מבודד, בקרת גישה מבוססת טוקן, סימני מים דינמיים, הגבלות ייצוא המתייחסות לחוויית משתמש ולא להגנה, ורישום ביקורת הן מה שמבדילות הטמעה שניתן להגן עליה מזו שלא ניתן.
שניים מתוך שבעתן הם שלכם ללא קשר לאיזה מציג תבחרו: הרשאה וביקורת. אף רכיב לא יכול לקבל החלטה זו עבור השכירות שלכם.
מוכנים לבנות את ההטמעה?
- התחילו מתיעוד הספק עבור הגרסה שאתם מתקינים. עבור Doconut, זהו doconut.com — חבילות, מדריכי התקנה ודוגמאות. העתקת מפתחות קונפיגורציה ממאמרים היא הדרך שבה אינטגרציות נופלות בעת עדכון.
- הוסיפו את רשימת הבדיקה בעל שבעת הנקודות לתבנית ה‑pull‑request כך שהסקירה האבטחתית תתבצע לפני המיזוג, ולא אחרי האירוע.
- בדקו תחילה את המקרים השליליים: מזהה מסמך של שוכר אחר, סשן שפג תוקפו, בקשה ישירה לעמוד או לנקודת קצה של ייצוא. אלו הם המבחנים שמגלים חורים אמיתיים.
