از حریم خصوصی کاربر محافظت کنید

کاربران اگر افزونه‌ای حریم خصوصی آنها را به خطر بیندازد یا مجوزهایی بیش از آنچه که به نظر می‌رسد لازم است درخواست کند، آن را نصب نخواهند کرد. درخواست‌های مجوز باید برای کاربران منطقی باشد و به اطلاعات حیاتی لازم برای پیاده‌سازی افزونه محدود شود. افزونه‌هایی که هرگونه داده کاربر را جمع‌آوری یا منتقل می‌کنند، باید با سیاست‌های حفاظت از حریم خصوصی کاربر مطابقت داشته باشند.

با در نظر گرفتن این اقدامات احتیاطی برای ایمن نگه داشتن هویت کاربران افزونه، از آنها محافظت کرده و به آنها احترام بگذارید.

کاهش مجوزهای مورد نیاز

APIهایی که یک افزونه می‌تواند به آنها دسترسی داشته باشد، در فیلد permissions مانیفست مشخص شده‌اند. هرچه مجوزهای بیشتری اعطا شود، مهاجم راه‌های بیشتری برای رهگیری اطلاعات دارد. فقط APIهایی که یک افزونه به آنها وابسته است باید فهرست شوند و باید گزینه‌های کم‌تهاجمی‌تر در نظر گرفته شوند. هرچه یک افزونه مجوزهای کمتری درخواست کند، هشدارهای مجوز کمتری به کاربر نشان داده می‌شود. احتمال بیشتری وجود دارد که کاربران افزونه‌ای با هشدارهای محدود نصب کنند.

افزونه‌ها نباید با درخواست مجوزهایی که در حال حاضر به آنها نیازی ندارند، اما ممکن است در آینده پیاده‌سازی شوند، به داده‌های کاربر «دسترسی تضمین‌شده در آینده» داشته باشند. مجوزهای جدید را در به‌روزرسانی‌های افزونه بگنجانید و اختیاری کردن آنها را در نظر بگیرید.

تب فعال

افزونه‌هایی که از مجوزهای میزبان برای تزریق اسکریپت‌ها استفاده می‌کنند، اغلب می‌توانند جایگزین activeTab شوند. مجوز activeTab به یک افزونه دسترسی موقت به تب فعال فعلی می‌دهد، تنها زمانی که کاربر افزونه را فراخوانی کند . دسترسی زمانی قطع می‌شود که کاربر از تب فعلی خارج شود یا آن را ببندد. این مجوز به عنوان جایگزینی برای بسیاری از کاربردهای <all_urls> عمل می‌کند.

{
  "name": "Very Secure Extension",
  "version": "1.0",
  "description": "Example of a Secure Extension",
  "permissions": ["activeTab"],
  "manifest_version": 3
}

مجوز activeTab هیچ پیام هشداری را در حین نصب نمایش نمی‌دهد.

مجوزهای اختیاری را انتخاب کنید

با اضافه کردن مجوزهای اختیاری ، به کاربران این امکان را بدهید که ویژگی‌ها و مجوزهای مورد نیاز خود را از یک افزونه انتخاب کنند. اگر یک ویژگی برای عملکرد اصلی یک افزونه ضروری نیست، آن را اختیاری کنید و API یا دامنه را به فیلد optional_permissions منتقل کنید.

{
  "name": "Very Secure Extension",
  ...
  "optional_permissions": [ "tabs", ],
  "optional_host_permissions": ["https://www.google.com/" ],
  ...
}

اضافه کردن مجوزهای اختیاری به افزونه این امکان را می‌دهد که توضیح دهد چرا وقتی کاربر ویژگی مربوطه را فعال می‌کند، به یک مجوز خاص نیاز دارد. افزونه می‌تواند گزینه‌ای برای فعال کردن ویژگی‌ها به کاربر ارائه دهد.

تصویری از یک پنجره بازشو که درخواست فعال کردن مجوزها را دارد

کلیک روی «Ok!» رویداد زیر را در سرویس ورکر فعال می‌کند.

chrome.action.onClicked.addListener((event) => {
  // Permissions must be requested from inside a user gesture, like a button's
  // click handler.
  chrome.permissions.request(
    {
      permissions: ["tabs", "scripting"],
      origins: ['https://www.google.com/']
    },
    function (granted) {
      // The callback argument will be true if the user granted the permissions.
      if (granted) {
        // doSomething();
      } else {
        // doSomethingElse();
      }
    }
  );
});

سپس از کاربر درخواست زیر پرسیده می‌شود.

تصویری از درخواست مجوزهای اختیاری.

مجوزهای اختیاری را می‌توان در به‌روزرسانی افزونه نیز پیاده‌سازی کرد. انجام این کار، ویژگی جدید را بدون غیرفعال کردن افزونه، در دسترس کاربران قرار می‌دهد، همانطور که ممکن است در به‌روزرسانی با مجوزهای مورد نیاز جدید اتفاق بیفتد.

محدود کردن و ایمن‌سازی اطلاعات کاربر

فقط حداقل مقدار داده‌ای را که یک افزونه نیاز دارد درخواست کنید. هرچه اطلاعات کمتری از کاربر درخواست شود، در صورت به خطر افتادن افزونه، احتمال افشای آن کمتر می‌شود.

با تمام داده‌های درخواستی کاربر باید با احتیاط رفتار شود. داده‌ها را در یک سرور امن با دامنه ثبت‌شده ذخیره و بازیابی کنید. همیشه از HTTPS برای اتصال استفاده کنید و از نگهداری داده‌های حساس کاربر در سمت کلاینت افزونه خودداری کنید زیرا فضای ذخیره‌سازی افزونه رمزگذاری نشده است.

ذخیره داده و حالت ناشناس

افزونه‌ها می‌توانند با استفاده از API ذخیره‌سازی یا با ارسال درخواست‌هایی به سرور که منجر به ذخیره داده‌ها می‌شود، داده‌ها را ذخیره کنند. وقتی افزونه نیاز به ذخیره چیزی دارد، ابتدا بررسی کنید که آیا از یک پنجره ناشناس است یا خیر. به‌طور پیش‌فرض، افزونه‌ها در پنجره‌های ناشناس اجرا نمی‌شوند.

حالت ناشناس تضمین می‌کند که پنجره هیچ ردی از خود به جا نمی‌گذارد. هنگام کار با داده‌های پنجره‌های ناشناس، افزونه‌ها باید به این وعده عمل کنند. اگر یک افزونه معمولاً تاریخچه مرور را ذخیره می‌کند، تاریخچه پنجره‌های ناشناس را ذخیره نکنید. با این حال، افزونه‌ها می‌توانند تنظیمات برگزیده را از هر پنجره‌ای، چه در حالت ناشناس و چه غیر ناشناس، ذخیره کنند.

برای تشخیص اینکه آیا یک پنجره در حالت ناشناس است یا خیر، ویژگی incognito شیء tabs.Tab یا windows.Window مربوطه را بررسی کنید.

function saveTabData(tab) {
  if (tab.incognito) {
    return;
  } else {
    chrome.storage.local.set({data: tab.url});
  }
}