การควบคุมของผู้ใช้สำหรับสิทธิ์ของโฮสต์: คู่มือการเปลี่ยน

สรุป

สิ่งที่เปลี่ยนแปลงไป

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

API ใดบ้างที่ได้รับผลกระทบ

การเปลี่ยนแปลงนี้จะส่งผลต่อ API ที่ได้รับผลกระทบจากสิทธิ์ของโฮสต์ที่ระบุไว้ในส่วนขยาย ไฟล์ Manifest และสคริปต์เนื้อหา API ที่ต้องใช้สิทธิ์ของโฮสต์รวมถึง webRequest คุกกี้, tabs.executeScript() และ tabs.insertCSS() และดำเนินการแบบข้ามต้นทาง คำขอ เช่น ผ่าน XMLHTTPRequest หรือ fetch() API

กำลังจำกัดการเข้าถึง

ผู้ใช้จะจำกัดการเข้าถึงได้อย่างไร

ผู้ใช้เลือกได้ว่าจะให้ส่วนขยายทำงานเมื่อคลิก ในเว็บไซต์ที่เจาะจง หรือทั้งหมด เว็บไซต์ที่ขอ ตัวเลือกเหล่านี้จะแสดงแก่ผู้ใช้ในหน้า chrome://extensions รวมถึง ในเมนูตามบริบทของส่วนขยาย

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

จะเกิดอะไรขึ้นหากผู้ใช้เลือกที่จะเรียกใช้ส่วนขยายของฉัน "เมื่อคลิก"

โดยพื้นฐานแล้ว ส่วนขยายจะทำงานเสมือนว่าใช้สิทธิ์ activeTab ส่วนขยายคือ ได้รับสิทธิ์ชั่วคราวในการเข้าถึงโฮสต์ใดๆ ที่ผู้ใช้คลิกส่วนขยาย หากโฮสต์นั้นร้องขอโดย ส่วนขยาย (และไม่ใช่เว็บไซต์ที่ถูกจำกัด เช่น chrome://settings) เมื่อตั้งค่าให้ทำงานเมื่อคลิก Chrome จะติดป้ายส่วนขยายเป็นวงกลมและเงาตกกระทบ (ดูด้านล่าง) เพื่อบ่งบอกว่าเป็น ที่ขอสิทธิ์เข้าถึงเว็บไซต์ใดเว็บไซต์หนึ่ง

ภาพหน้าจอของ Chrome ที่มีการติดป้ายที่เพิ่มลงในไอคอนส่วนขยายในแถบเครื่องมือ

จะเกิดอะไรขึ้นหากผู้ใช้เลือกที่จะเรียกใช้ส่วนขยายของฉันในบางเว็บไซต์

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

จะเกิดอะไรขึ้นหากผู้ใช้เลือกที่จะเรียกใช้ส่วนขยายของฉันในทุกเว็บไซต์

ส่วนขยายสามารถเข้าถึงเว็บไซต์ที่ขอในไฟล์ Manifest โดยอัตโนมัติ

ลักษณะการทำงานของ API

API คำขอเว็บ

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

สคริปต์เนื้อหา, Tab.executeScript(), tabs.insertCSS()

ส่วนขยายยังคงสามารถแทรกสคริปต์และสไตล์ชีตโดยอัตโนมัติสำหรับเว็บไซต์ที่มีสิทธิ์เข้าถึง เป็น สำหรับเว็บไซต์ที่ส่วนขยายไม่มีสิทธิ์เข้าถึง Chrome จะติดป้ายส่วนขยายเพื่อระบุว่า ส่วนขยายจะขอเข้าถึงหน้าเว็บ จากนั้นผู้ใช้จึงจะให้สิทธิ์เข้าถึงส่วนขยายได้ หาก สคริปต์เนื้อหาได้รับการตั้งค่าให้แทรกที่ document_idle โดยสคริปต์จะแทรกทันที หรือไม่เช่นนั้น Chrome จะแจ้งให้ผู้ใช้รีเฟรชหน้าเว็บเพื่อให้ส่วนขยายแทรกสคริปต์ได้เร็วขึ้น การโหลดหน้าเว็บ (ที่ document_start หรือ document_end) Callback สำหรับ tabs.executeScript() และ ระบบจะเรียกใช้เมธอด tabs.insertCSS() ต่อเมื่อผู้ใช้ให้สิทธิ์เข้าถึงเว็บไซต์เท่านั้น

คุกกี้และหน้าพื้นหลัง XHR

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

ตัวอย่างด้านล่างแสดงการทำงานของการดำเนินการนี้สำหรับ API ของคุกกี้

ก่อน:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

หลัง:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

การย้ายข้อมูล

แนวทางปฏิบัติแนะนำเพื่อหลีกเลี่ยงการได้รับผลกระทบเชิงลบคืออะไร

ส่วนขยายสามารถใช้ API สิทธิ์ที่ไม่บังคับ, activeTab และ declarativeContent API เพื่อทำตามแนวทางปฏิบัติที่ดีที่สุด ระบบจะให้สิทธิ์ที่ไม่บังคับระหว่างรันไทม์ และอนุญาตให้ส่วนขยาย ขอสิทธิ์การเข้าถึงเว็บไซต์ที่เฉพาะเจาะจง สิทธิ์ activeTab จะไม่ได้รับผลกระทบ และส่วนขยาย และใช้งานต่อได้ตามปกติ declarativeContent API เป็นผลิตภัณฑ์ทดแทนความต้องการจำนวนมาก เพื่อแทรกสคริปต์ลงในทุกหน้า

จะเกิดอะไรขึ้นกับผู้ใช้ปัจจุบัน การตั้งค่า

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

ฉันจะตรวจสอบได้อย่างไรว่าส่วนขยายของฉันมีสิทธิ์ทำงานบนเว็บไซต์หรือไม่

คุณสามารถใช้ API permissions.contains() เพื่อตรวจสอบว่าส่วนขยายของคุณ ที่ให้สิทธิ์เข้าถึงต้นทางหนึ่งๆ