אבטחת הקלטות שיחות: הארכיטקטורה של VoiceBox
הקלטות שיחה הן מהמידע הרגיש ביותר שעסק מחזיק: שמות, פרטי תשלום, לעיתים מצב בריאותי. העמוד הזה נכתב כדי שבדיקת אבטחה תוכל להתקדם - הוא מפרט את הבקרות שקיימות בקוד, ואומר במפורש מה עדיין לא פורסם.
כל שורה בטבלת הבקרות מצביעה על מודול שאפשר לפתוח. מה שאי אפשר להצביע עליו נמצא בפרק "מה עדיין לא פורסם", ולא בטבלה.
- הצפנה במנוחה
- AES-256-GCM
- בידוד בין ארגונים
- RLS ב-PostgreSQL
- יומן ביקורת
- שרשרת גיבובים
- קישור מסירה
- 72 שעות · מכסה לפי מספר ההקלטות
נבדק לאחרונה: 28 ביולי 2026 · גרסה 1.0
מה העמוד הזה מנסה לעשות
להביא בדיקת רכש לנקודה שבה אפשר להחליט. לכן הוא בנוי משלושה חלקים: זרימת הנתונים כפי שהיא בקוד, טבלת בקרות שכל שורה בה מפנה למודול, ורשימה מפורשת של מה שעדיין לא פרסמנו.
החלק השלישי הוא זה שקובע אם אפשר לסמוך על שני הראשונים. עמוד אבטחה ששותק בדיוק בנושאים שאין לו עליהם תשובה - אירוח, מעבדי משנה, הסמכות - מאלץ את הקורא להניח את הטוב ביותר, ואת ההנחה הזו מישהו מגלה מאוחר מדי. עדיף לכתוב "לא פורסם" ולתת לכם לשאול.
העמוד מתאר את המוצר, לא את הארגון שלכם, ואינו חוות דעת משפטית. הוא גם אינו קובע עמידה בדרישות עבורכם - זו קביעה שרק אתם והיועצים שלכם יכולים לעשות.
זרימת הנתונים, שלב אחר שלב
שמונה שלבים, מהרגע שהמרכזייה מדווחת על שיחה ועד המחיקה. לכל שלב רשומה הבקרה שחלה עליו והמודול שאפשר לפתוח כדי לבדוק אותה.
1. קליטה
המרכזייה שולחת רשומת שיחה חתומה, או שקובץ מועלה בבקשת multipart חתומה.
חתימת HMAC-SHA256 עם חלון של חמש דקות מול שידור חוזר. מפתח החתימה נגזר ממפתח האב ואינו נשמר בבסיס הנתונים. גוף JSON מוגבל ל-256KiB, נספר על הזרם עצמו; בקשת העלאה מוגבלת ל-200MiB.
apps/web/src/app/api/ingest · packages/services/src/webhooks.ts2. משיכת אודיו
כששולחים כתובת הקלטה במקום קובץ, תהליך רקע מוריד אותה אחת לחמש דקות.
HTTP או HTTPS בלבד; כתובת שמפנה לרשת פנימית נחסמת. מגבלת זמן של דקה ומגבלת גודל של 200MiB לקובץ.
apps/worker/src/jobs/fetchRecordings.ts · packages/telephony/src/fetcher.ts3. אחסון
הקובץ נכתב לאחסון האובייקטים, ורשומת ההקלטה נשמרת בבסיס הנתונים.
מפתח נתונים ייחודי לכל אובייקט, עטוף במפתח נגזר לכל ארגון. גיבוב SHA-256 מחושב על הזרם בדרך פנימה. Object Lock מוחל היכן שהאחסון תומך בו.
packages/storage/src/vault.ts · packages/core/src/crypto/integrity.ts4. תמלול
אופציונלי. כשהוא מופעל, קובץ האודיו נשלח למנוע התמלול שהוגדר.
כבוי כברירת מחדל. נקודת הקצה היא פרמטר הגדרה, כדי שאפשר יהיה להריץ מנוע מקומי ולא לשלוח אודיו החוצה כלל.
apps/worker/src/jobs/transcribe.ts · packages/asr5. בקשה
צרכן מבקש את ההקלטה שלו בפורטל הציבורי של בית העסק.
קוד חד-פעמי בן שש ספרות, בתוקף לעשר דקות, חמישה ניסיונות לכל היותר וחמש שליחות לכל יעד בשעה. הקוד נשמר כגיבוב ומושווה בהשוואה עמידת-זמן.
packages/services/src/identity.ts6. הרשאת גישה
עם השחרור נוצר קישור מסירה, קשור למספר שהבקשה אומתה מולו.
32 בייטים אקראיים, נשמרים כגיבוב בלבד. תוקף של 72 שעות כברירת מחדל ומכסת הורדות שנגזרת ממספר ההקלטות שנמסרו, ניתן לביטול מיידי, ותמיד נדרש קוד נוסף בפתיחה.
packages/services/src/requests.ts · packages/db/src/defaults.ts7. מסירה
הצרכן מנגן או מוריד את ההקלטה.
הבייטים עוברים דרך השרת ומפוענחים לבקשה אחת בלבד. אין קישור חתום ישירות לאחסון. כל האזנה וכל הורדה נרשמות ביומן, ורק הורדה ממש גורעת ממכסת הקישור.
apps/web/src/app/api/consumer/media8. מחיקה
בתום תקופת השמירה ההקלטה נמחקת, והרישום על קיומה נשאר.
המחיקה נעצרת בשלושה מצבים: צו עיכוב הליכים, בקשת צרכן פתוחה, ו-Object Lock שטרם פג. מעליהם שני תנאים ברמת החשבון: מתג המחיקה האוטומטית, וסטטוס החשבון עצמו - העבודה המתוזמנת רצה רק לחשבון פעיל. הרשומה נשמרת עם הגיבוב כהוכחה שהמחיקה בוצעה.
packages/services/src/compliance.ts · apps/worker/src/jobs/retention.ts
שתי הערות על השרשרת הזו. ראשית, תור העבודות רץ על אותו PostgreSQL של היישום, כך שאין שירות תורים נפרד שמחזיק בדרכו עותקים של אודיו. שנית, התמלול הוא השלב היחיד שבו האודיו יכול לצאת אל מערכת אחרת - והוא כבוי כברירת מחדל, עם נקודת קצה שהיא פרמטר הגדרה ולא ספק קבוע.
טבלת הבקרות
שמונה עשרה בקרות, ולכל אחת המודול שמממש אותה. הטבלה רחבה; במסך צר אפשר לגלול אותה לצדדים.
| תחום | הבקרה | מה זה אומר בפועל | איפה זה בקוד |
|---|---|---|---|
| הצפנה במנוחה | AES-256-GCM, מפתח נתונים לכל אובייקט | לכל הקלטה נוצר מפתח נתונים משלה. המפתח נעטף במפתח של הארגון, שנגזר ממפתח אב שנמצא בסביבת ההרצה ולא בבסיס הנתונים. עותק של בסיס הנתונים לבדו אינו פותח קובץ. | packages/core/src/crypto/integrity.ts |
| ניהול מפתחות | גזירה לכל ארגון, עם גרסאות | מפתח הארגון נגזר ב-HMAC-SHA256 ממפתח האב וממזהה הארגון. לכל אובייקט נשמרת גרסת המפתח שאיתה נכתב, ומפתחות קודמים נשמרים לקריאה - כך שהחלפת מפתח אינה הופכת הקלטות ישנות לבלתי ניתנות לפתיחה. | packages/storage/src/vault.ts |
| שלמות הקובץ | SHA-256 מחושב בדרך פנימה | הגיבוב מחושב על הזרם בזמן הקליטה ולא בקריאה חוזרת, ולכן הוא מתאר את מה שהתקבל. הוא מוחזר בכותרת בזמן ההורדה, כדי שאפשר יהיה להשוות את הקובץ שהתקבל. | packages/storage/src/vault.ts |
| הצפנה בהעברה | HSTS, CSP עם nonce ו-strict-dynamic | כשהבקשה הגיעה ב-HTTPS נשלחת כותרת HSTS לשנתיים, כולל תת-דומיינים ועם סימון preload. מדיניות התוכן מייצרת nonce חדש לכל תשובה ונשענת על strict-dynamic, כך שבדפדפן שמכיר אותו רץ רק סקריפט שנושא את ה-nonce של אותה תשובה. הרשימה כוללת גם https: ו-unsafe-inline כנפילה לאחור לדפדפן ישן שאינו מכיר strict-dynamic; דפדפן שמכיר אותו מתעלם משניהם. הם כתובים כאן במפורש מפני שסורק שקורא את הכותרת יראה אותם. סגנון מוטבע מותר - טוען הגופנים של Next מייצר אותו ואין דרך להצמיד לו nonce, וסגנון אינו רץ. בנוסף: frame-ancestors none, object-src none, base-uri self ו-form-action self. | apps/web/src/middleware.ts |
| כותרות דפדפן | nosniff, Referrer-Policy, יכולות כבויות | X-Content-Type-Options: nosniff נשלחת על כל תשובה, גם על קבצים סטטיים שהמידלוור אינו רץ עליהם. Referrer-Policy היא strict-origin-when-cross-origin, כך שכתובת מלאה של דף בכלים אינה נוסעת לאתר אחר. X-Frame-Options: DENY נשלחת לצד frame-ancestors, לדפדפן שמכיר רק אחת מהן. Permissions-Policy מכבה מצלמה, מיקרופון ואיתור מיקום: הקונסולה מנגנת הקלטות ולעולם אינה מקליטה. | apps/web/next.config.ts |
| עוגיות | HttpOnly, SameSite=Lax, ללא דומיין | כל עוגייה שהמערכת כותבת - צוות, מנהל, צרכן, הרשאת מסירה ואתגר קוד - היא HttpOnly ואינה נקראת מסקריפט. לא נקבע דומיין, ולכן היא שייכת למארח הזה בלבד ותת-דומיין שכן אינו יכול לקרוא או לכתוב אותה. SameSite הוא Lax ולא Strict, מפני שקישור מסירה שנפתח מהודעת SMS הוא ניווט ממקור אחר ש-Strict היה מפיל. בייצור מסומן גם Secure. עוגיות ההתחברות עצמן חתומות ב-HMAC ונבדקות בהשוואה עמידת-זמן. | apps/web/src/lib/session.ts |
| בידוד בין ארגונים | Row-Level Security בבסיס הנתונים | לכל טבלה עם שיוך לארגון מוגדרת מדיניות שמסננת לפי הארגון של הטרנזקציה הנוכחית, עם force כדי שגם בעל הטבלה יהיה כפוף לה. שאילתה ששכחה תנאי סינון אינה יכולה להחזיר שורה של ארגון אחר. | packages/db/src/rls.ts |
| עבודת רקע חוצת ארגונים | מתג עקיפה מפורש | תהליכים שחייבים לעבור על כל הארגונים מדליקים דגל ייעודי בטרנזקציה. העקיפה היא החלטה שנכתבת בקוד במקום אחד, ולא תופעת לוואי של חיבור בעל הרשאות רחבות. | packages/db/src/rls.ts |
| הרשאות צוות | חמישה תפקידים, אודיו מוגבל | owner, admin, compliance, agent, viewer. התפקיד viewer קיים כדי שרואה חשבון או מבקר יוכלו לראות שהעסק עומד בחובה בלי להאזין לשיחות. תפקיד שאינו מוכר נדחה, ולא מתקבל כברירת מחדל. | packages/services/src/staff.ts |
| תוקף ההרשאה | התפקיד נקרא מחדש בכל בקשה | העוגייה חתומה, אבל היא תצלום מרגע הכניסה. ההרשאה נבדקת מול המצב השמור, כך שהשבתת משתמש או הורדת תפקיד תופסות מיד ולא בכניסה הבאה. | apps/web/src/lib/staffAccess.ts |
| סיסמאות | scrypt, מינימום 12 תווים | scrypt עם N=2^17, r=8, p=1. הפרמטרים נשמרים בתוך הגיבוב, כך שהעלאת עלות בעתיד אינה מבטלת סיסמאות קיימות. חמישה כשלונות נועלים את החשבון לרבע שעה. | packages/core/src/crypto/password.ts |
| אימות צרכן | קוד חד-פעמי, נשמר כגיבוב | שש ספרות ממחולל אקראי אחיד, עשר דקות תוקף, חמישה ניסיונות, וחמש שליחות לכל יעד בשעה. הקוד נשמר כגיבוב יחד עם מזהה האתגר, ומושווה בהשוואה עמידת-זמן. | packages/services/src/identity.ts |
| קישורי מסירה | אסימון אקראי, גיבוב בלבד, מוגבל | 32 בייטים אקראיים. בבסיס הנתונים נשמר רק הגיבוב, כך שדליפת בסיס נתונים אינה מייצרת קישורים עובדים. ברירת המחדל היא 72 שעות, ומכסת ההורדות נגזרת ממספר ההקלטות שנמסרו, וניתן לבטל קישור מיידית. | packages/services/src/requests.ts |
| מסירת האודיו | הזרמה דרך השרת, בלי קישור חתום | הבייטים מפוענחים לבקשה בודדת ומוחזרים עם Cache-Control פרטי. קישור חתום ישירות לאחסון היה ממשיך לעבוד אחרי ביטול ההרשאה, ולא היה מותיר רישום מי האזין. | apps/web/src/app/api/consumer/media |
| יומן ביקורת | הוספה בלבד, בשתי שכבות | מדיניות בבסיס הנתונים אוסרת עדכון ומחיקה, וטריגר חוסם אותם גם עבור משתמש-על. שתי השכבות קיימות מפני שהאחת לבדה אינה מחזיקה מול חשבון בעל הרשאות רחבות אצל ספק מנוהל. | packages/db/src/rls.ts |
| שלמות היומן | שרשרת גיבובים לכל ארגון | כל רשומה נושאת מספר סידורי ואת הגיבוב של קודמתה. בדיקה יזומה מחשבת מחדש את השרשרת ומצביעה על הרשומה הראשונה שאינה מתיישבת, במקום להסתפק בתשובה "תקין". | packages/db/src/audit.ts |
| מה נרשם | האזנה, הורדה, חשיפת מפתח, מחיקה | האזנה של איש צוות להקלטה היא אירוע פרטיות ונרשמת ככזו. נרשמות גם חשיפה או החלפה של מפתח חיבור, כל שלב בחיי בקשת צרכן, וכל מחיקה לפי מדיניות השמירה. | packages/db/src/audit.ts |
| שמירה ומחיקה | מחיקה אוטומטית עם שלושה עיכובים ושני תנאי חשבון | ברירת המחדל היא 24 חודשים לשיחה שהבשילה לעסקה ושישה חודשים לשיחה שלא, עם 30 יום השהיה שהם ברירת מחדל של המוצר ולא דרישת חוק. המחיקה נעצרת מפני צו עיכוב, מפני בקשת צרכן פתוחה, ומפני Object Lock שטרם פג. בנוסף, ארגון שכיבה את המחיקה האוטומטית אינו מוחק דבר - ההקלטות שעבר מועדן נספרות כממתינות, וזו חשיפה של שמירת יתר ולא ברירת מחדל שקטה. | packages/services/src/compliance.ts |
| הוכחת מחיקה | הרשומה והגיבוב נשמרים | אחרי המחיקה נשארת שורה שאומרת שההקלטה הייתה, מתי נמחקה ומה היה הגיבוב שלה. מחיקה שאינה מותירה עקבות אינה ניתנת להוכחה, בדיוק כמו מחיקה שלא בוצעה. | packages/services/src/compliance.ts |
| מפתחות חיבור | נגזרים, לא נשמרים | מפתח החתימה של מקור קליטה נגזר ממפתח האב וממזהה המקור. הוא אינו יושב בעמודה, ולכן אינו דולף עם עותק של בסיס הנתונים. כל חשיפה שלו במסך נרשמת ביומן. | packages/core/src/crypto/integrity.ts |
בידוד בין ארגונים, קצת יותר לעומק
זו הבקרה החשובה ביותר במוצר רב-דיירי, ולכן היא אינה נשענת על משמעת של מפתחים. "תמיד נזכור להוסיף את תנאי הסינון" נכשל פעם אחת, ומוסר לבית עסק אחד את שיחות הלקוחות של אחר.
- כל טבלה שנושאת שיוך לארגון מוגדרת עם
enable row level securityוגםforce row level security, כך שגם בעל הטבלה כפוף למדיניות. - המדיניות משווה את השיוך לערך שנקבע לטרנזקציה הנוכחית. תפקיד היישום אינו בעל הטבלאות ואינו משתמש-על.
- טבלת הארגונים עצמה מסוננת לפי המפתח הראשי שלה, כדי שגם רשימת הלקוחות לא תהיה קריאה לרוחב.
- שתי טבלאות - אתגרי קוד חד-פעמי והתראות - מתירות שיוך ריק, מפני שקוד נשלח לפני שידוע לאיזה ארגון הפונה שייך.
- עבודת רקע חוצת ארגונים מדליקה דגל עקיפה מפורש, ואינה מתחברת בזהות רחבה יותר.
יומן הביקורת
היומן הוא הבקרה שהופכת את כל השאר לבר-בדיקה. הוא נכתב בהוספה בלבד, בשתי שכבות: מדיניות בבסיס הנתונים שאוסרת עדכון ומחיקה, וטריגר שחוסם אותם גם כשהחיבור נעשה בהרשאות רחבות - מצב שקורה אצל ספקי PostgreSQL מנוהלים, שבהם הלקוח מקבל תפקיד קרוב למשתמש-על.
כל רשומה נושאת מספר סידורי לארגון ואת הגיבוב של קודמתה. בדיקה יזומה מחשבת מחדש את השרשרת, ואם משהו אינו מתיישב היא מצביעה על הרשומה הראשונה שנשברה - ולא מסתפקת בתשובה כללית. בין האירועים הנרשמים: האזנה של איש צוות להקלטה, ניגון או הורדה על ידי צרכן, חשיפה או החלפה של מפתח חיבור, כל שלב בחיי בקשת צרכן, ומחיקה לפי מדיניות השמירה.
הפירוט המלא - מה נרשם בכל אירוע, איך נראית בדיקת השרשרת ומה היומן אינו מוכיח - נמצא בעמוד יומן הביקורת.
מה עדיין לא פורסם
הפרק הזה קיים כדי שלא תצטרכו להסיק דבר מהיעדרו. כל נושא כאן הוא נושא שרוכש מצפה למצוא, ושאין לנו לגביו היום תשובה שפורסמה.
- שכבת התעבורה עצמה
- הכותרות שבטבלה נשלחות מהיישום. סיום ה-TLS - התעודה, גרסת הפרוטוקול ואוסף הצפנים - נעשה במעטפת ההרצה ולא כאן, ולכן איננו קובעים עליו דבר. גם כותרת ה-HSTS תלויה בכך שהמעטפת מעבירה x-forwarded-proto: אם היא אינה מעבירה, הכותרת פשוט לא תישלח. הסימון preload הוא הצהרת כוונה בלבד; הכנסה לרשימת ה-preload של הדפדפנים היא הגשה נפרדת, ואיננו טוענים שהיא בוצעה.
- ספק אירוח, אזור גיאוגרפי והתחייבות לריבונות נתונים
- איננו מפרסמים כאן ספק, אזור או התחייבות לריבונות נתונים. אלה נקבעים בסביבת ההרצה - המערכת בנויה כך שתוכל לרוץ גם על אחסון תואם S3 בשליטתכם - ולכן התשובה נמסרת בכתב מול הסביבה הספציפית שבה היא תופעל, כחלק מבדיקת הרכש.
- רשימת מעבדי משנה
- טרם פרסמנו רשימת מעבדי משנה מתוחזקת, עם תאריכי עדכון והודעה מראש על שינוי. אין להסיק מהעמוד הזה שקיימת רשימה כזו, ואין להסיק שאין מעבדי משנה כלל. מנוע התמלול, לדוגמה, כבוי כברירת מחדל ונקודת הקצה שלו היא פרמטר הגדרה - כך שהתשובה תלויה בתצורה ולא בברירת מחדל אחת.
- תקנים והסמכות
- אין לנו הסמכת ISO 27001, אין דוח SOC 2 ואין תעודה של גוף חיצוני. לא נטען אחרת, גם לא ברמז של "עומד בדרישות". מה שיש הוא הבקרות שבטבלה למעלה, שכל אחת מהן ניתנת לבדיקה.
- מבחני חדירה ותוכנית דיווח על פרצות
- לא פרסמנו דוח מבחן חדירה חיצוני, ואין לנו כרגע תוכנית מסודרת לדיווח על פרצות אבטחה עם לוחות זמנים לתגובה. עד שתהיה, פנייה בנושא אבטחה מטופלת בכתובת שבתחתית העמוד.
- התאוששות מאסון ויעדי שחזור
- לא פרסמנו יעדי RPO ו-RTO, לוח גיבויים או תוצאה של תרגיל שחזור. אלה קשורים ישירות לסביבת ההרצה, ולכן הם חלק מאותה תשובה בכתב.
- נוהל טיפול באירוע אבטחה
- לא פרסמנו נוהל תגובה לאירוע עם התחייבות ללוח זמנים להודעה. מה שכן קיים במוצר הוא יומן ביקורת שאי אפשר לערוך בדיעבד - החומר שכל בדיקה של אירוע מתחילה ממנו.
- נוהל גישה מנהלתית של הצוות שלנו
- לא פרסמנו נוהל שמתאר מתי איש צוות שלנו רשאי לגשת לנתוני לקוח, מי מאשר ואיך זה מתועד. לכן גם לא נטען כאן שגישה כזו אינה אפשרית. מה שכן נכון: האזנה דרך המוצר נרשמת ביומן, ומפתח האב אינו נמצא בבסיס הנתונים.
- זמינות והתחייבות שירות
- לא פרסמנו יעד זמינות ולא מנגנון זיכוי בגין אי-עמידה בו.
- סיווג הקלטות כמידע ביומטרי
- איננו מסווגים הקלטת שיחה כמידע ביומטרי, ואיננו קובעים שהיא אינה כזו. זו שאלה משפטית שתלויה בשימוש שנעשה בהקלטה, ולא קביעה שנכון לנו לעשות בעמוד מוצר. מה שכן אפשר לומר על המערכת: היא אינה מפיקה טביעת קול ואינה מזהה דוברים לפי מאפייני קול.
מה זה אומר על החוק
סעיף 16ד לחוק הגנת הצרכן, שנוסף בתיקון מס׳ 74 ומוכר בשוק כתיקון 73, אינו קובע אמצעי אבטחה, אינו קובע אמצעי אימות ואינו קובע פורמט מסירה. מה שהוא כן עושה הוא לייצר מאגר של הקלטות שחייבות להישמר ולהימסר - ובמפורש אינו גורע מהוראות חוק הגנת הפרטיות, שממשיך לחול על אותו מאגר במלואו.
לכן כל מה שכתוב למעלה הוא החלטת עיצוב שלנו ולא ציטוט של דרישה, ותקנות שיבואו עשויות לשנות לוחות זמנים ותקופות שמירה. נוסח החוק כפי שפורסם ברשומות הוא המקור. העמוד הזה אינו ייעוץ משפטי, והסבר מלא של הסעיף נמצא בעמוד החוק.
האמור כאן נבדק מול נוסח תיקון 74 שפורסם ברשומות ב-22 ביולי 2026, ונקרא מולו לאחרונה ב-2 באוגוסט 2026. לא נבדק בידי עורך דין מטעמנו.
איך לבדוק אותנו
שש בדיקות שאפשר להריץ בסביבת בדיקה, בלי להאמין לנו על אף אחת מהן:
- לשלוח לקליטה בקשה עם חתימה שגויה, ואז בקשה עם חותמת זמן ישנה, ולוודא ששתיהן נדחות.
- לבצע בקשת צרכן מלאה מהפורטל, ולראות שהקישור מפסיק לעבוד אחרי מספר ההורדות שהוגדר.
- להעביר את קישור המסירה למכשיר אחר, ולוודא שהוא מבקש קוד חדש למספר המקורי.
- להאזין להקלטה מהקונסולה, ואז לפתוח את יומן הביקורת ולראות את הרישום על ההאזנה.
- להוריד הקלטה ולהשוות את הגיבוב שמוחזר בכותרת מול הגיבוב שמוצג במסך.
- לבקש את התשובות לנושאים שבפרק "מה עדיין לא פורסם" בכתב, עבור הסביבה שלכם.
גרסה ושינויים
- גרסה 1.0 · 28 ביולי 2026
- פרסום ראשון: זרימת נתונים בשמונה שלבים, שמונה עשרה בקרות עם הפניה למודול, פירוט הבידוד בין ארגונים ויומן הביקורת, ותשעה נושאים שסומנו במפורש כלא מפורסמים. כל בקרה נבדקה מול המקור בזמן הכתיבה.
העמוד נבדק מחדש עם כל שינוי מהותי במסלולי הקליטה, האחסון או המסירה. שינוי בבקרה יופיע כאן עם תאריך, ולא יוחלף בשקט.
קריאה נוספת
- יומן הביקורת ושרשרת השמירה - איך נראית ההוכחה שרשומה לא שונתה, ומה היא אינה מוכיחה.
- מסלולי הקליטה - מה מתחבר, ומה במפורש אינו נתמך היום.
- מדריך העברת ארכיון - איך מכניסים הקלטות ישנות בלי לאבד ראיות ובלי למחוק במקור.
- מדיניות הפרטיות - מה נשמר על הצרכן, ולמה מבקשים ממנו לאמת מספר.
- המחיר ומה שאינו כלול בו - כולל מה קורה להקלטות אם מפסיקים לשלם, שהיא שאלת אבטחה לא פחות משהיא שאלה מסחרית.
שאלות שחוזרות בבדיקות רכש
- איך אתם מבטיחים שארגון אחד לא יראה שיחות של אחר?
- הבידוד נאכף בבסיס הנתונים ולא בקוד היישום. לכל טבלה עם שיוך לארגון מוגדרת מדיניות Row-Level Security שמסננת לפי הארגון של הטרנזקציה, עם force כדי שגם בעל הטבלה יהיה כפוף לה. המשמעות המעשית: שאילתה ששכחה תנאי סינון מחזירה אפס שורות, ולא שורות של מישהו אחר. עבודת רקע שחייבת לחצות ארגונים מדליקה דגל מפורש, כך שהעקיפה כתובה בקוד במקום אחד ואינה תופעת לוואי של חיבור רחב.
- האם עובד שלכם יכול להאזין להקלטות שלנו?
- ההקלטות מוצפנות במפתח שנגזר לכל ארגון, ומפתח האב יושב בסביבת ההרצה ולא בבסיס הנתונים - כך שגישה לבסיס הנתונים לבדו אינה פותחת אודיו. מה שעדיין לא פרסמנו הוא נוהל גישה מנהלתית עם אישור ותיעוד, ולכן לא נטען כאן שגישה כזו בלתי אפשרית. מה שכן: כל האזנה דרך המוצר נרשמת ביומן שאי אפשר לערוך בדיעבד.
- האם הקוד החד-פעמי מזהה את הצרכן?
- לא, והדיוק כאן חשוב. קוד ב-SMS מוכיח שליטה נוכחית במספר - לא זהות ולא בעלות. זו בדיוק העובדה שבית העסק כבר הסתמך עליה כשחייג למספר הזה, ולכן היא בסיס סביר למסירה, אבל היא אינה תחליף לזיהוי ואיננו מציגים אותה ככזה. סעיף 16ד ממילא אינו קובע אמצעי אימות; זו החלטת עיצוב שלנו.
- מה קורה לקישור המסירה אחרי שהצרכן קיבל את ההקלטה?
- הקישור פג אחרי 72 שעות או כשמכסת ההורדות שלו נוצלה, לפי המוקדם, ואפשר לבטל אותו מיד. המכסה נגזרת ממספר ההקלטות שנמסרו - לפחות עשר, ולפחות שלוש הורדות לכל הקלטה - כדי שהמכסה תגביל הפצה של הקישור ולא את קבלת ההקלטות עצמן. הוא קשור למספר שהבקשה אומתה מולו ודורש קוד נוסף בפתיחה, כך שהעברה שלו הלאה אינה מעבירה גישה. שני המספרים האלה הם ברירת מחדל שבית העסק יכול לשנות.
- מה נמחק בתום תקופת השמירה, ומה נשאר?
- קובץ האודיו נמחק. נשארת שורה שאומרת שההקלטה הייתה, מתי נמחקה ומה היה הגיבוב שלה - כי מחיקה שאינה מותירה עקבות אינה ניתנת להוכחה. המחיקה נעצרת אוטומטית כשקיים צו עיכוב הליכים, כשיש בקשת צרכן פתוחה, וכשנעילת האחסון טרם פגה - וכן כשהמחיקה האוטומטית כבויה במדיניות הארגון, או כשהחשבון עצמו אינו פעיל.
- האם תמלאו את שאלון האבטחה שלנו?
- נענה על כל מה שניתן לאמת. במכוון לא פרסמנו כאן שאלון מוכן להורדה: שאלון אבטחה כולל סעיפי אירוח, מעבדי משנה, הסמכות והתאוששות מאסון, ולאלה אין לנו היום תשובה שפורסמה. שאלון עם תשובות ריקות או משוערות גרוע משאלון שאינו קיים, ולכן העמוד הזה מפרט את מה שנבדק בקוד ואת מה שאינו מפורסם, ואת השאר נשלים בכתב מול הבדיקה שלכם.
שלחו את השאלון שלכם, נסמן מה מאומת ומה לא
נענה על מה שאפשר להצביע עליו בקוד או בתצורה, ונכתוב "לא פורסם" ליד השאר במקום להשלים בניחוש. hello@voicebox.co.il
אבטחה נמדדת בסוף במה שאפשר להוכיח. זה מה שנרשם על כל גישה, בקשה ומסירה - ומה שלא.
להמשך קריאה
- מדיניות פרטיותאיזה מידע VoiceBox מעבדת, בשם מי, היכן הוא נשמר, למשך כמה זמן, ואילו זכויות עומדות לצרכן לפי חוק הגנת הפרטיות.
- מערכת הקלטת שיחות לעסקיםעמוד הקטגוריה של VoiceBox: מה מערכת לניהול הקלטות עושה מעל קובץ ההקלטה - קליטה מהמרכזייה, שמירה ומחיקה מבוקרת, איתור שיחות שלא נקלטו ומסירה ללקוח.
- מחיריםשני מסלולים, 290 ו-740 ₪ לחודש, ומה בדיוק כלול: מה קורה להקלטות אם מפסיקים לשלם, מי רואה אותן, ומה איננו כוללים - בלי תקופת ניסיון ובלי חיוב לפי דקה.