ปกป้องความเป็นส่วนตัวของผู้ใช้

ผู้ใช้จะไม่ติดตั้งส่วนขยายหากส่วนขยายถูกบุกรุกความเป็นส่วนตัวหรือขอสิทธิ์เพิ่มเติมตามที่เห็นว่าจำเป็น คำขอสิทธิ์ควรฟังดูสมเหตุสมผลสำหรับผู้ใช้และจำกัดอยู่เพียงข้อมูลสำคัญที่จำเป็นต่อการใช้งานส่วนขยายเท่านั้น ส่วนขยายที่รวบรวมหรือส่งข้อมูลผู้ใช้ต้องเป็นไปตามนโยบายภายใต้การปกป้องความเป็นส่วนตัวของผู้ใช้

ปกป้องและเคารพผู้ใช้ส่วนขยายโดยรวมข้อควรระวังเหล่านี้เพื่อรักษาความปลอดภัยให้กับข้อมูลประจำตัว

ลดสิทธิ์ที่จำเป็น

จะมีการระบุ API ที่ส่วนขยายเข้าถึงได้ในช่อง permissions ของไฟล์ Manifest ยิ่งให้สิทธิ์มากเท่าใด ผู้โจมตีก็จะดักจับข้อมูลได้มากขึ้นเท่านั้น ควรระบุเฉพาะ API ที่ส่วนขยายต้องใช้เท่านั้น และควรพิจารณาตัวเลือกที่มีการล่วงละเมิดน้อยกว่า ยิ่งคำขอมีสิทธิ์น้อยลงเท่าไหร่ คำเตือนเกี่ยวกับสิทธิ์ก็จะแสดงให้ผู้ใช้เห็นน้อยลงเท่านั้น ผู้ใช้มีแนวโน้มที่จะติดตั้งส่วนขยายที่มีคำเตือนแบบจำกัดมากกว่า

ส่วนขยายไม่ควรเข้าถึงข้อมูลผู้ใช้เพื่อ "รับประกันอนาคต" ด้วยการขอสิทธิ์ที่ผู้ใช้ไม่จำเป็นในปัจจุบัน แต่อาจนำมาใช้ในอนาคต รวมสิทธิ์ใหม่พร้อมการอัปเดตส่วนขยายและลองกำหนดสิทธิ์ให้เป็นแบบไม่บังคับ

activeTab

ส่วนขยายที่ใช้สิทธิ์ของโฮสต์เพื่อแทรกสคริปต์มักจะมาแทนที่ 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/" ],
  ...
}

การรวมสิทธิ์ที่ไม่บังคับจะช่วยให้ส่วนขยายอธิบายเหตุผลที่ต้องใช้สิทธิ์บางอย่างได้เมื่อผู้ใช้เปิดใช้ฟีเจอร์ที่เกี่ยวข้อง ส่วนขยายจะมีตัวเลือกให้ผู้ใช้ เปิดใช้ฟีเจอร์ต่างๆ ได้

ภาพหน้าจอของป๊อปอัปที่ขอสิทธิ์เข้าถึง

การคลิกตกลงจะทริกเกอร์เหตุการณ์ต่อไปนี้ในโปรแกรมทำงานของบริการ

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 เพื่อเชื่อมต่อและหลีกเลี่ยงการเก็บข้อมูลที่ละเอียดอ่อนของผู้ใช้ไว้ที่ฝั่งไคลเอ็นต์ของส่วนขยายเสมอ เนื่องจากพื้นที่เก็บข้อมูลส่วนขยายไม่ได้เข้ารหัส

การบันทึกข้อมูลและโหมดไม่ระบุตัวตน

ส่วนขยายสามารถบันทึกข้อมูลโดยใช้ storage API หรือสร้างคำขอของเซิร์ฟเวอร์ที่ส่งผลให้บันทึกข้อมูลได้ เมื่อส่วนขยายต้องการบันทึกข้อมูลบางอย่าง ก่อนอื่นให้พิจารณาว่าส่วนขยายนั้นมาจากหน้าต่างที่ไม่ระบุตัวตนหรือไม่ โดยค่าเริ่มต้น ส่วนขยายจะไม่ทำงานในหน้าต่างที่ไม่ระบุตัวตน

โหมดไม่ระบุตัวตนบอกไว้ว่าหน้าต่างจะไม่มีรอยทาง เมื่อต้องจัดการกับข้อมูลจาก หน้าต่างที่ไม่ระบุตัวตน ส่วนขยายควรเป็นไปตามเงื่อนไขนี้ หากส่วนขยายบันทึกประวัติการท่องเว็บตามปกติ โปรดอย่าบันทึกประวัติการเข้าชมจากหน้าต่างที่ไม่ระบุตัวตน อย่างไรก็ตาม ส่วนขยายสามารถจัดเก็บค่ากำหนด จากหน้าต่างใดก็ได้ ทั้งในโหมดไม่ระบุตัวตน

หากต้องการตรวจหาว่าหน้าต่างอยู่ในโหมดไม่ระบุตัวตนหรือไม่ ให้ตรวจสอบพร็อพเพอร์ตี้ incognito ของออบเจ็กต์ tabs.Tab หรือ windows.Window ที่เกี่ยวข้อง

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