גרסת Chrome 124 כוללת את התכונה הרשאת גישה לרשת פרטית להקלה על תוכן מעורב. אנחנו ממשיכים בתקופת הניסיון להוצאה משימוש לאתרים שזקוקים לזמן נוסף כדי להתכונן לשינוי הזה. עם זאת, תקופת הניסיון הזו תסתיים עם הגרסה 132 של Chrome, שצפויה לצאת ב-4 בפברואר 2025. בפוסט הזה נסביר על השינוי, נרחיב על העיצוב של התכונה, נסביר איך להעביר את האתרים הקיימים ואיך לבדוק את ההטמעה.
מה משתנה?
כדי ליצור חיבורים למכשירים ברשת פרטית שאין להם שמות ייחודיים ברמת הגלובוס, ולכן אי אפשר לקבל עבורם אישורי TLS, התכונה הזו מוסיפה אפשרות חדשה ל-fetch()
כדי להצהיר על הכוונה של המפתחים לדבר עם מכשיר כזה. זה כולל תכונה חדשה בשליטת המדיניות שמטרתה להגביל את הגישה של כל אתר ליכולת הזו, וכותרות חדשות לתגובת קדם-ההפעלה של השרת שיספקו מטא-נתונים נוספים.
מהי גישה לרשת פרטית?
גישה לרשת פרטית (PNA, שנקראה בעבר CORS-RFC1918 ובקצרה 'גישה לרשת מקומית') היא תכונת אבטחה שמגבילה את היכולת של אתרים לשלוח בקשות לשרתים ברשתות פרטיות. כך אפשר להגן על משתמשים ורשתות פנימיות מפני התקפות פוטנציאליות, כמו התקפות של גניבת זהות משתמש (CSRF). הטמענו את PNA ב-Chrome בהדרגה, וההגנה תתרחב בגרסאות הבאות.
למה צריך בקשה להרשאה?
ב-Chrome 94 נוספה חסימה של גישה לרשת פרטית מאתרים ציבוריים לא מאובטחים. במהלך הבדיקה הנוכחית של ההוצאה משימוש של גישה לרשת פרטית מהקשרים לא מאובטחים, נחשפו אתגרים בהעברת אתרים מושפעים ל-HTTPS. אחת מהבעיות הנפוצות היא הקושי להעביר מכשירים פרטיים ל-HTTPS, מה שמוביל להפרות של בדיקות התוכן המעורב.
כדי להתמודד עם האתגר הזה, נוספה בקשת הרשאה חדשה במסגרת גרסת מקור לניסיון מ-Chrome 120, והיא בגרסה יציבה מ-Chrome 124.
מתי צריך בקשת הרשאה?
תכננו לסיים את תקופת הניסיון של ההוצאה משימוש של הקשרים לא מאובטחים בכמה אבני דרך אחרי שהתכונה של בקשת ההרשאה התחילה להיות זמינה. כדי להבטיח תאימות, צריך להעביר את האתרים הציבוריים ל-HTTPS. אם אתם לא יכולים להעביר את השרת הפרטי שלכם ל-HTTPS, התכונה החדשה של בקשת ההרשאה תאפשר לכם להקל על הבדיקות של תוכן מעורב.
תהליך העבודה הרגיל של בקשה לגישה לרשת פרטית עם בקשה להרשאה הוא:
הפעלה של בקשת ההרשאה
מוסיפים את המאפיין החדש targetAddressSpace
כאפשרות אחזור, ואז הבקשה יכולה לדלג על בדיקת התוכן המעורב.
fetch("http://router.local/ping", {
targetAddressSpace: "private",
});
בהתאם למאמר גישה לרשת פרטית: אנחנו משיקים בדיקות קדם-הפעלה, כל בקשה לרשת פרטית מקדימה בקשת קדם-הפעלה. בקשת קדם-ההפעלה הזו תכלול כותרת חדשה, Access-Control-Request-Private-Network: true
, והתגובה המתאימה חייבת לכלול את הכותרת Access-Control-Allow-Private-Network: true
.
כדי להתאים את ההודעה החדשה לבקשת ההרשאה, המכשירים צריכים לכלול שתי כותרות תגובה חדשות: Private-Network-Access-Name
ו-Private-Network-Access-ID
.
Private-Network-Access-ID
: ערך של 48 סיביות שמוצג כ-6 בייטים הקסדצימליים שמפרידים ביניהם נקודתיים.Private-Network-Access-Name
: שם תקין כמחרוזת שתואם לביטוי הרגולרי של ECMAScript/^[a-z0-9_-.]+$/.
. האורך המקסימלי של השם הוא 248 יחידות קוד UTF-8.
Private-Network-Access-Name: "My Smart Toothbrush"
Private-Network-Access-ID: "01:23:45:67:89:0A"
הדגמה (דמו)
אפשר לבדוק את הדמו בכתובת: https://private-network-access-permission-test.glitch.me/.
כדי להשתמש באתר ההדגמה, עליך להפעיל את השרת הפרטי שלך. השרת הפרטי צריך להשיב עם כותרת HTTP Access-Control-Allow-Private-Network: true
, יחד עם הכותרות Private-Network-Access-ID
ו-Private-Network-Access-Name
שצוינו על ידי השרת. אם הכול מוגדר בצורה נכונה, אמורה להופיע בקשה להרשאה הבאה:
יציאה מתקופת הניסיון להוצאה משימוש של הקשר לא מאובטח
באתרים שנרשמו להם גישה לרשת פרטית לצורך הוצאה משימוש של הקשרים לא מאובטחים, זה הזמן להעביר את האתר עם בקשת ההרשאות החדשה שלנו ולצאת מתקופת הניסיון עכשיו.
אחרי שמעדכנים את הקוד, מוחקים את אסימון הניסיון בכותרות ה-HTML, JavaScript או HTTP. אם אתם לא זוכרים איפה שמרתם את אסימון הניסיון, תוכלו לעיין בקטע רישום לניסיון לפני ההוצאה משימוש בפוסט הקודם בבלוג.
מומלץ גם למחוק את האסימון בדף של תקופת הניסיון.
מה השלב הבא?
אנחנו עדיין בודקים פתרון לבקשות מ-fetch()
שאינן מ-API.
נבדקו כמה פתרונות, למשל שימוש ב-service workers או שינוי מרחב כתובות היעד כמדיניות Content-Security-Policy חדשה. עם זאת, הפורמט הסופי של בקשות מ-fetch()
שאינו API עדיין בבדיקה.
יכול להיות שבעתיד תהיה תמיכה בבקשות מסגרות משנה באמצעות מדיניות הרשאות.
בעתיד, יכול להיות שנוסיף תמיכה בכללי מדיניות הרשאות כדי להקל על השימוש בפריימים משניים.
משוב על תרחישים לדוגמה של רשתות פרטיות
אם אתם מארחים אתר ברשת פרטית שצריך בקשות מרשתות ציבוריות, צוות Chrome רוצה לקבל מכם משוב. אפשר לדווח על בעיה במעקב אחר בעיות ב-Chromium (רכיב: Blink>SecurityFeature>CORS>PrivateNetworkAccess) או במאגר ב-GitHub.