היכולת של תוסף לגשת לאתרים ולרוב ממשקי ה-API של Chrome נקבעת על סמך ההצהרה הרשאות. צריך להגביל את ההרשאות רק למה שדרוש לפונקציונליות שלו. הגבלת ההרשאות קובעת את היכולות של התוסף ומצמצמת את הפריצה לנתונים אם התוסף נפרץ. הגנה על תוספים ועל המשתמשים שלהם באמצעות הטמעה הרשאות מפורשות, מינימליות ואופציונליות.
ארגון ההרשאות
הרשאות הן מחרוזות ידועות שמתייחסות ל-Chrome API או לתבניות התאמה שמעניקות גישה אל מארח אחד או יותר. הם רשומים במניפסט ומצוינים כהרשאות הנדרשות או הרשאות אופציונליות.
{
"name": "Permissions Extension",
...
// required permissions
"permissions": [
"activeTab",
"contextMenus",
"storage"
],
// optional permissions
"optional_permissions": [
"topSites",
"http://www.developer.chrome.com/*"
],
...
"manifest_version": 2
}
כדאי להגביל את ההרשאות הנדרשות רק למה שנחוץ לפונקציונליות העיקרית של התוסף. התוסף לא אמור לבקש יותר הרשאות ממה שהוא צריך כרגע. לא תהיה הוכחה לעתיד מבקשים הרשאות שייתכן שיידרשו עם העדכונים.
את ההרשאות הנדרשות לתכונות אופציונליות צריך לרשום כהרשאות אופציונליות. הזה מאפשר למשתמשים להחליט כמה גישה הם מוכנים לספק הארכה ואילו תכונות הן הרצויות.
זיהוי ההרשאות הנדרשות
יכול להיות שתוסף פשוט יצטרך לבקש הרשאות מרובות ומוצגות הרבה הרשאות אזהרות במהלך ההתקנה. משתמשים נוטים לסמוך על תוסף עם מספר מוגבל של אזהרות או כשמוסבר להם על ההרשאות.
לזהות את הפונקציונליות העיקרית של תוסף ואת ההרשאות שנדרשות עבורו. נקודות שכדאי להעלות להפוך תכונות לאופציונליות אם הן דורשות הרשאות עם אזהרות.
הפעלת הרשאות אופציונליות עם אירועים
הפונקציונליות העיקרית של התוסף לדוגמה להרשאות אופציונליות מבטלת את דף הכרטיסייה החדשה. אחת התכונות מציגה את היעד היומי של המשתמש. לתכונה הזו נדרש רק אחסון ולא כוללת אזהרה.
לתוסף יש תכונה נוספת: שבהם מוצגים האתרים המובילים של המשתמש. לתכונה הזו נדרשת הרשאה ל-topSites, עם אזהרה.
פיתוח תכונות שמסתמכות על הרשאות עם אזהרות כאופציונליות, והצגת תכונות כאלה נותנת למשתמשים היכרות אורגנית עם התוסף, ללא כל סיכון. בנוסף, שמאפשר למשתמשים להתאים אישית את החוויה שלהם באמצעות תוסף, ויוצר הזדמנות להסביר אזהרות.
החלפה של הרשאת ActiveTab
ההרשאה activeTab
מעניקה גישה זמנית לאתר שהמשתמש נמצא בו ומאפשרת
כדי להשתמש בהרשאה "tabs"
בכרטיסייה הנוכחית. הוא מחליף את הצורך
"<all_urls>"
במקרים רבים ולא תוצג אזהרה לגבי ההתקנה.
ללא ActiveTab:
באמצעות ActiveTab:
ההרשאה activeTab
מעניקה לתוסף גישה זמנית לכרטיסייה הפעילה הנוכחית כאשר
המשתמש מפעיל את התוסף. אם התוסף נפרץ, התוקף צריך להמתין
שהמשתמש יפעיל את התוסף לפני שהוא יקבל גישה, והגישה הזו תימשך רק עד
מתבצעת ניווט או סגירה של הכרטיסייה.
ההרשאה activeTab
מופעלת בכרטיסייה, אבל התוסף יכול:
- להתקשר אל
tabs.executeScript
אוtabs.insertCSS
בכרטיסייה הזו. - מקבלים את כתובת ה-URL, הכותרת וסמל האתר של הכרטיסייה הזו באמצעות API שמחזיר אובייקט
tabs.Tab
. - הקצאת בקשות רשת בכרטיסייה למקור המסגרת הראשי של הכרטיסייה באמצעות webRequest API. התוסף מקבל באופן זמני הרשאות מארח עבור מקור המסגרת הראשי של הכרטיסייה.
תנועות המשתמש הבאות מאפשרות את activeTab
:
- ביצוע פעולה בדפדפן
- ביצוע פעולה בדף
- להפעיל אפשרות בתפריט ההקשר.
- הפעלת מקשי קיצור מ-commands API
- אישור הצעה מ-סרגל ה-API
מתן גישה
אם לתוסף נדרש גישה לכתובות URL של file://
או פעולה במצב פרטי, המשתמשים יצטרכו
להפעיל את הגישה לתכונות האלה בדף הפרטים של התוסף בכתובת chrome://extensions.
תוסף יכול לזהות אם הוא מופעל במצב פרטי באמצעות קריאה
extension.isAllowedIncognitoAccess()
או יכול לפעול ב-file://
כתובות URL עם
extension.isAllowedFileSchemeAccess()
.
הסבר על ההרשאות
קיימות אזהרות לגבי הרשאות כדי לתאר את היכולות ש-API העניק למשתמשים בתוסף, אבל
יכול להיות שחלק מהאזהרות האלה לא יהיו ברורות מלכתחילה. לדוגמה, הוספת "tabs"
ההרשאה מובילה לאזהרה שנראית לא קשורה: התוסף יכול לקרוא את תוכן הגלישה שלכם
פעילות. אפשר להשתמש ב-API chrome.tabs
רק כדי לפתוח כרטיסיות חדשות, אבל אפשר גם להשתמש בו
כדי לראות את כתובת ה-URL שמשויכת לכל כרטיסייה חדשה שנפתחה באמצעות האובייקטים tabs.Tab.
כשאפשר, כדאי להטמיע הרשאות אופציונליות או ממשק API פחות חזק כדי להימנע אזהרות.
הצגת האזהרות
לא יוצגו אזהרות לגבי הרשאות אם תוסף נטען כקובץ לא ארוז. כדי להציג
אזהרות לגבי ההרשאות של התוסף, צריך לעבור אל chrome://extensions
, לוודא שמצב הפיתוח מופעל
ולוחצים על חבילה של תוסף.
מציינים את הנתיב לתיקיית התוסף בשדה 'ספריית בסיס של תוסף' ולוחצים על הלחצן Pack Extension (תוסף חבילה). אם מדובר בחבילה של חבילה בפעם הראשונה, מתעלמים מהשדה מפתח פרטי.
Chrome ייצור שני קבצים, קובץ .crx
וקובץ .pem
, שכוללים את
מפתח פרטי.
אל תאבדו את המפתח הפרטי! יש לשמור את הקובץ .pem
במקום סודי ומאובטח. זה יהיה
נדרשים כדי לעדכן את התוסף.
כדי להתקין את הקובץ .crx
, משחררים אותו בדף הניהול של התוסף ל-Chrome.
אחרי שחרור הקובץ .crx
, הדפדפן ישאל אם אפשר להוסיף את התוסף ולהציג אותו
אזהרות.
הרשאות עם אזהרות
הערה: טבלאות ההרשאות מתעדכנות בהתאם לתוצאות הכי טובות, והן עשויות להכיל אי-התאמות קלות
עם האזהרות הנוכחיות. בנוסף, יכול להיות שחלק מההרשאות לא יציגו אזהרות שקשורות אליהן,
הרשאות אחרות. לדוגמה, האזהרה "tabs"
לא תוצג אם התוסף גם
מבקש את "<all_urls>"
. כדי לאמת את האזהרות האחרונות שהוצגו לגבי הרשאות של תוספים, צריך לפעול לפי השלבים הבאים:
השלבים שמפורטים בקטע הצגת אזהרות.
הרשאה | תיאור | אזהרה |
---|---|---|
|
התפקיד הזה מעניק גישה לכל המארחים. יכול להיות שאפשר יהיה להימנע מהצהרה על הרשאות מארח באמצעות את ההרשאה activeTab. | לקרוא ולשנות את כל הנתונים שלכם באתרים שאליהם אתם נכנסים |
"https://HostName.com/" |
מעניקה לתוסף גישה ל-"https://HostName.com/" . ייתכן שניתן להימנע מהצהרה על
הרשאות מארח באמצעות ההרשאה activeTab. |
קריאה ושינוי של הנתונים שלך ב-HostName.com |
"bookmarks" |
מעניק לתוסף גישה לממשק ה-API של chrome.bookmarks. | קריאה ושינוי של הסימניות |
"clipboardRead" |
חובה אם התוסף הוא document.execCommand('paste') . |
קריאת נתונים שמעתיקים ומדביקים |
"clipboardWrite" |
מציין שהתוסף משתמש ב-document.execCommand('copy') או
document.execCommand('cut') . |
שינוי נתונים שאתם מעתיקים ומדביקים |
"contentSettings" |
מעניק לתוסף גישה ל-chrome.contentSettings API. | שינוי ההגדרות שלך ששולטות באתרים גישה לתכונות כמו קובצי Cookie, JavaScript, יישומי פלאגין, מיקום גיאוגרפי, מיקרופון, מצלמה וכו'. |
"debugger" |
מעניק לתוסף גישה ל-API chrome.debugger. |
|
"declarativeNetRequest" |
מעניק לתוסף גישה ל-API chrome.declarativeNetRequest. | חסימת תוכן בדף |
"desktopCapture" |
התפקיד הזה מאפשר לתוסף גישה ל-API chrome.desktopCapture. | צילום התוכן מהמסך |
"downloads" |
מעניק לתוסף גישה ל-API chrome.downloads. | ניהול ההורדות |
"geolocation" |
התוסף יכול להשתמש ב-geolocation API של HTML5 בלי לבקש הרשאה מהמשתמש. | זיהוי המיקום הפיזי שלכם |
"history" |
מעניק לתוסף גישה לממשק ה-API chrome.history. | קריאה ושינוי של היסטוריית הגלישה |
"management" |
מעניק לתוסף גישה לממשק ה-API chrome.management. | ניהול האפליקציות, התוספים והעיצובים |
"nativeMessaging" |
מעניקה לתוסף גישה ל-API להעברת הודעות נייטיב. | תקשורת עם אפליקציות מקוריות שמשתפים פעולה |
"notifications" |
התפקיד הזה מאפשר לתוסף גישה ל-API chrome.notifications. | הצגת התראות |
"pageCapture" |
מעניק לתוסף גישה לממשק ה-API של chrome.pageCapture. | לקרוא ולשנות את כל הנתונים שלכם באתרים שאליהם אתם נכנסים |
"privacy" |
מעניקה לתוסף גישה ל-API chrome.privacy. | שינוי של הגדרות שקשורות לפרטיות |
"proxy" |
מעניק לתוסף גישה לממשק ה-API של chrome.proxy. | לקרוא ולשנות את כל הנתונים שלכם באתרים שאליהם אתם נכנסים |
"system.storage" |
מעניק לתוסף גישה לממשק ה-API של chrome.system.storage. | זיהוי והוצאה של התקני אחסון |
"tabCapture" |
התפקיד הזה מעניק לתוספים גישה אל chrome.tabCapture API. | לקרוא ולשנות את כל הנתונים שלכם באתרים שאליהם אתם נכנסים |
"tabs" |
התפקיד הזה מאפשר לתוסף גישה לשדות בעלי הרשאות של האובייקטים Tab שמשמשים את מספר ממשקי ה-API
כולל chrome.tabs ו-chrome.windows. לחשבון
בנסיבות רבות אין צורך להצהיר על ההרשאה ל-"tabs" כדי להשתמש בתוסף
ממשקי ה-API האלה. |
קריאת היסטוריית הגלישה |
"topSites" |
מעניק לתוסף גישה לממשק ה-API של chrome.topSites. | איך לקרוא רשימה של האתרים שאליהם אתם נכנסים בתדירות הגבוהה ביותר |
"ttsEngine" |
מעניק לתוסף גישה לממשק ה-API של chrome.ttsEngine. | קריאת כל הטקסט שנאמר באמצעות דיבור מסונתז |
"webNavigation" |
התפקיד הזה מעניק גישה לממשק ה-API של chrome.webNavigation. | קריאת היסטוריית הגלישה |
עדכון ההרשאות
עדכון של תוסף בהרשאות נוספות עלול להשבית אותו באופן זמני. המשתמש יצטרך להפעיל אותו מחדש אחרי הסכמה לאזהרות חדשות.
אם המשתמש מעדכן באופן ידני תוסף שכולל עכשיו את ההרשאה tabs (כרטיסיות), הוא יקבל אזהרה בדף הניהול.
אם התוסף יעודכן באופן אוטומטי, הוא יושבת עד שהמשתמש יסכים לתוסף החדש הרשאות.
כדי למנוע זאת, אפשר להפוך את התכונה החדשה לאופציונלית ולהוסיף עדכוני הרשאות חדשים
optional_permissions
במניפסט.