แอปที่มี
INTERNET
สิทธิ์จะเข้าถึงอุปกรณ์ในเครือข่าย LAN ได้
ซึ่งช่วยให้แอปเชื่อมต่อกับอุปกรณ์ในพื้นที่ได้ง่าย แต่ก็มีผลกระทบด้านความเป็นส่วนตัวด้วย เช่น การสร้างลายนิ้วมือของผู้ใช้และการเป็นพร็อกซีสำหรับตำแหน่ง
โปรเจ็กต์การป้องกันเครือข่าย LAN มีเป้าหมายเพื่อปกป้องความเป็นส่วนตัวของผู้ใช้โดย จำกัดการเข้าถึงเครือข่าย LAN ไว้เบื้องหลังสิทธิ์รันไทม์ใหม่
ผลกระทบ
ใน Android 16 สิทธิ์นี้จะเป็นฟีเจอร์แบบเลือกใช้ ซึ่งหมายความว่าจะมีเพียง แอปที่เลือกใช้เท่านั้นที่จะได้รับผลกระทบ เป้าหมายของการเลือกใช้คือการช่วยให้นักพัฒนาแอป เข้าใจว่าส่วนใดของแอปที่ต้องอาศัยการเข้าถึงเครือข่าย LAN แบบไม่เจาะจงปลายทาง เพื่อเตรียมพร้อมที่จะใช้การป้องกันสิทธิ์ใน Android รุ่นต่อๆ ไป
แอปจะได้รับผลกระทบหากเข้าถึงเครือข่าย LAN ของผู้ใช้โดยใช้สิ่งต่อไปนี้
- การใช้ซ็อกเก็ตดิบโดยตรงหรือในไลบรารีในที่อยู่เครือข่ายภายใน เช่น
Multicast DNS (mDNS)
หรือSimple Service Discovery Protocol (SSDP)
- การใช้คลาสระดับเฟรมเวิร์กที่เข้าถึงเครือข่ายภายใน เช่น
NsdManager
รายละเอียดผลกระทบ
การรับส่งข้อมูลไปยังและจากที่อยู่เครือข่ายภายในต้องมีสิทธิ์เข้าถึงเครือข่ายภายใน ตารางต่อไปนี้แสดงกรณีที่พบบ่อย
การดำเนินการเครือข่ายระดับต่ำของแอป | ต้องมีสิทธิ์เข้าถึงเครือข่ายภายใน |
---|---|
สร้างการเชื่อมต่อ TCP ขาออก | ใช่ |
การยอมรับการเชื่อมต่อ TCP ขาเข้า | ใช่ |
การส่ง Unicast, Multicast, Broadcast แบบ UDP | ใช่ |
รับการรับส่งข้อมูล UDP แบบ Unicast, Multicast, Broadcast ที่เข้ามา | ใช่ |
ข้อจำกัดเหล่านี้ได้รับการติดตั้งใช้งานในส่วนลึกของสแต็กเครือข่าย จึงมีผลกับAPI เครือข่ายทั้งหมด ซึ่งรวมถึงซ็อกเก็ตที่สร้างในแพลตฟอร์ม
หรือโค้ดที่มีการจัดการ ไลบรารีเครือข่าย เช่น Cronet และ OkHttp รวมถึง API ใดๆ
ที่ใช้บนไลบรารีเหล่านั้น การพยายามแก้ไขบริการในเครือข่ายภายใน
ที่มีคำต่อท้ายเป็น .local
ต้องใช้สิทธิ์เข้าถึงเครือข่ายภายใน
ข้อยกเว้นสำหรับกฎข้างต้น
- หากเซิร์ฟเวอร์ DNS ของอุปกรณ์อยู่ในเครือข่ายภายใน การรับส่งข้อมูลไปยัง / จากเซิร์ฟเวอร์ดังกล่าว (ที่พอร์ต 53) ไม่จำเป็นต้องมีสิทธิ์เข้าถึงเครือข่ายภายใน
- แอปพลิเคชันที่ใช้ Output Switcher เป็นตัวเลือกในแอปจะไม่ต้องมีสิทธิ์เข้าถึงเครือข่ายในพื้นที่ (คำแนะนำเพิ่มเติมจะมาในการเปิดตัวในอนาคต)
คำแนะนำ
หากต้องการเลือกใช้การจำกัดเครือข่ายภายใน ให้ทำดังนี้
- แฟลชอุปกรณ์เป็นบิลด์ที่มี Android 16 รุ่นเบต้า 3 ขึ้นไป
- ติดตั้งแอปที่จะทดสอบ
สลับการกำหนดค่า Appcompat โดยใช้ adb
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
รีบูตอุปกรณ์
ตอนนี้สิทธิ์เข้าถึงเครือข่าย LAN ของแอปถูกจำกัดแล้ว และการพยายามเข้าถึงเครือข่าย LAN จะทำให้เกิดข้อผิดพลาดของซ็อกเก็ต
หากคุณใช้ API ที่ดำเนินการในเครือข่ายภายในภายนอกกระบวนการของแอป เช่น NsdManager
API เหล่านั้นจะไม่ได้รับผลกระทบในระหว่างการเลือกใช้
หากต้องการกู้คืนสิทธิ์เข้าถึง คุณต้องให้สิทธิ์แอปของคุณแก่ NEARBY_WIFI_DEVICES
- ตรวจสอบว่าแอปประกาศสิทธิ์
NEARBY_WIFI_DEVICES
ในmanifest
- ไปที่การตั้งค่า > แอป > [ชื่อแอปพลิเคชัน] > สิทธิ์ > อุปกรณ์ที่อยู่ใกล้เคียง > อนุญาต
ตอนนี้การเข้าถึงเครือข่าย LAN ของแอปควรได้รับการกู้คืนแล้ว และสถานการณ์ทั้งหมดควรทํางานได้เหมือนก่อนที่จะเลือกใช้แอป การจราจรของข้อมูลในเครือข่ายของแอปจะได้รับผลกระทบดังนี้
สิทธิ์ | คำขอ LAN ขาออก | คำขออินเทอร์เน็ตขาออก/ขาเข้า | คำขอ LAN ขาเข้า |
---|---|---|---|
ให้สิทธิ์ | Works | Works | Works |
ไม่ให้สิทธิ์ | เรื่องหน้าแตก | Works | เรื่องหน้าแตก |
ใช้คำสั่งต่อไปนี้เพื่อเปิด/ปิดการกำหนดค่า Appcompat
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
ข้อผิดพลาด
ระบบจะส่งข้อผิดพลาดที่เกิดจากข้อจำกัดเหล่านี้ไปยังซ็อกเก็ตที่เรียกใช้
เมื่อใดก็ตามที่เรียกใช้ send
หรือตัวแปร send
ไปยังที่อยู่เครือข่ายภายใน
ตัวอย่างข้อผิดพลาด
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
ข้อบกพร่อง
ส่งข้อบกพร่องและความคิดเห็นสำหรับ
- ความคลาดเคลื่อนในการเข้าถึง LAN (คุณไม่คิดว่าการเข้าถึงบางอย่างควรได้รับการพิจารณาเป็นการเข้าถึง "เครือข่าย LAN")
- ข้อบกพร่องที่ควรบล็อกการเข้าถึง LAN แต่ไม่ได้บล็อก
- ข้อบกพร่องที่ควรอนุญาตให้เข้าถึง LAN แต่กลับถูกบล็อก
รายการต่อไปนี้จะไม่ได้รับผลกระทบจากการเปลี่ยนแปลงนี้
- การเข้าถึงอินเทอร์เน็ต
- เครือข่ายมือถือ