הצבת פרוטוטייפ מאחורי VPN מרגישה פרטית, כך שהשאלה היחידה שנותרת נראית כמו מי מקבל את הפרופיל. ההנחה הזו נכשלת באופן מסוים: מנהרה שולטת במי יכול להגיע למארח, לא במה המארח חושף ברגע שהם מגיעים. התצוגה עדיין מריצה סביבת הרצה, מחזיקה נתונים וקוראת לאינטגרציות שעלולות לשלוח דואר אמיתי או לכתוב למסד נתונים אמיתי. התייחס ל-VPN כדלת הכניסה ואז תכנן את החדר שמאחוריה.

מסלול אינו קהל

רישום בודק ל-VPN עונה בדיוק על שאלה אחת: האם המכשיר הזה יכול להגיע לכתובת? הוא לא אומר דבר על אילו עמודים, ממשקי API או קונסולות המכשיר הזה רשאי להשתמש. אלה הרשאות נפרדות, ושער שיודע רק כתובות לא יכול לאכוף אותן.

כתוב את חוזה התצוגה כרשימה קצרה: שם מארח, מאזין, פעולות מותרות ומי מחזיק בכל תפקיד. לאחר מכן בדוק שהרשימה מתאימה למה שבאמת חשוף.

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

סביבת ההרצה שאתה משתף היא חלק מהחוזה

שרת פיתוח עם מאתר שגיאות וטעינה מחדש אוטומטית הוא כלי לאדם אחד על מכונה אחת. תיעוד המסגרות חד משמעי בכך: מדריך הפריסה של Flask אומר ששרת הפיתוח והמאתר שלו אינם לייצור, והוא סופר גם שירותים פרטיים או חד-משתמשיים כייצור. אותו היגיון חל על כל מסגרת שיש בה טוען מחדש ועמוד שגיאה אינטראקטיבי. תכונות נוחות נועדו לקצר את הלולאה בין שמירת קובץ לראיית שינוי, לא לעמוד מול בודק שאינך שולט בו.

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

מאזין עם תו כללי הוא החצי השני של הטעות הזו. כריכה לכל ממשק חושפת את השירות ברשתות שלא התכוונת אליהן, כולל ה-Wi-Fi של בית הקפה.

השתמש בחשבונות חד-פעמיים ובנתונים בלי תופעות לוואי אמיתיות

השתמש בחשבונות שנוצרו לבדיקות ובנתונים שלא יכולים להביך אף אחד. החלק המסוכן הוא רק לעתים רחוקות שורת מסד הנתונים; זו האינטגרציה שמאחורי הכפתור. דואר, תשלומים, SMS, וובהוקים וייצוא קבצים מגיעים כולם מחוץ לתצוגה.

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

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

בדוק את העמוד, הנכסים והשקע

עמוד שמוצג אינו תצוגה שעובדת. ה-HTML עשוי להיטען בזמן שמארח נכסים, API או WebSocket עדיין מצביע על כתובת שהבודק לא יכול להגיע אליה. כל אחד מאלה הוא רשומה נפרדת בחוזה.

ממכשיר מאושר, בקש את העמוד ואת הנכס הגדול ביותר בנפרד:

curl -sS -o /dev/null -w "%{http_code}" https://preview.staging.example/
curl -sS -o /dev/null -w "%{http_code}" https://preview.staging.example/assets/app.js

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

הוצא את התצוגה בתאריך, לא לפי זיכרון

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

אמת את ההוצאה מבחוץ: שם המארח אמור להפסיק להיפתר או להפסיק לענות ללקוחות לא מאושרים.

שמור את המקור ואת הערות השחזור, אבל לא את נתיב הגיבוי. המבחן של גבול תצוגה טוב הוא משעמם: מכשיר מאושר יכול לבצע את הפעולות הנדרשות, וזהות לא מאושרת לא יכולה. כך חייב להיות גם אחרי שהמנהרה נכבית. התוצאה הזו שווה יותר מסמל VPN ליד פרוטוטייפ שרץ עם כל תכונות הפיתוח מופעלות.

מאמרים קשורים