การแก้ไขช่องโหว่ในการแทรก SQL

ข้อมูลนี้มีไว้สำหรับนักพัฒนาซอฟต์แวร์ของแอปที่มีช่องโหว่ในการแทรก SQL

สิ่งที่เกิดขึ้น

แอปของคุณอย่างน้อย 1 แอปมีช่องโหว่ในการแทรก SQL ที่ต้องแก้ไข โปรดดูประกาศใน Play Console เราอาจนำแอปที่มีช่องโหว่ด้านความปลอดภัยที่ไม่ได้รับการแก้ไขออกจาก Google Play หลังพ้นกำหนดเวลาที่แสดงใน Play Console

สิ่งที่ต้องดำเนินการ​

  1. ลงชื่อเข้าใช้ Play Console และไปที่ส่วนการแจ้งเตือนเพื่อดูแอปที่ได้รับผลกระทบและกำหนดเวลาในการแก้ไขปัญหาเหล่านี้
  2. อัปเดตแอปที่ได้รับผลกระทบและแก้ไขช่องโหว่
  3. ส่งเวอร์ชันที่อัปเดตของแอปที่ได้รับผลกระทบ

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

รายละเอียดเพิ่มเติม

การติดตั้งใช้งาน query, update และ delete ใน ContentProviders ที่ส่งออกอาจมีช่องโหว่การแทรก SQL หากมีการส่งอินพุตที่ไม่ผ่านการตรวจสอบไปยังคำสั่ง SQL แอปที่เป็นอันตรายอาจส่งอินพุตที่สร้างขึ้นมาเพื่อเข้าถึงข้อมูลส่วนตัวหรือสร้างความเสียหายให้กับเนื้อหาในฐานข้อมูล คุณแก้ไขปัญหานี้ได้ด้วยวิธีต่อไปนี้

หากไม่จำเป็นต้องเปิดเผย ContentProvider ที่ได้รับผลกระทบแก่แอปอื่นๆ ให้ทำดังนี้

  • คุณอาจแก้ไขแท็ก <provider> ของ ContentProvider ที่ได้รับผลกระทบในไฟล์ Manifest เพื่อตั้งค่าandroid:exported="false" ซึ่งจะป้องกันไม่ให้แอปอื่นๆ ส่ง Intent ไปยัง ContentProvider ที่ได้รับผลกระทบ
  • นอกจากนี้ คุณอาจตั้งค่าแอตทริบิวต์ android:permission ให้เป็น permission ที่มี android:protectionLevel="signature" เพื่อป้องกันไม่ให้แอปที่สร้างขึ้นโดยนักพัฒนาคนอื่นๆ ส่ง Intent ไปยัง ContentProvider ที่ได้รับผลกระทบ

หากจำเป็นต้องเปิดเผย ContentProvider ที่ได้รับผลกระทบแก่แอปอื่นๆ ให้ทำดังนี้

  • คุณป้องกันการแทรก SQL เข้าไปใน SQLiteDatabase.query ได้โดยใช้โหมดเข้มงวดที่มีแผนที่การคาดคะเน โหมดเข้มงวดช่วยป้องกันวลีการเลือกที่เป็นอันตราย และแผนที่การคาดคะเนช่วยป้องกันวลีการคาดคะเนที่เป็นอันตราย คุณต้องใช้ทั้ง 2 ฟีเจอร์เพื่อให้มั่นใจว่าคำค้นหามีความปลอดภัย
  • คุณป้องกันการแทรก SQL เข้าไปใน SQLiteDatabase.update และ SQLiteDatabase.delete ได้โดยใช้วลีการเลือกที่ใช้ "?" เป็นพารามิเตอร์แบบแทนที่ได้และอาร์เรย์ที่แยกต่างหากของอาร์กิวเมนต์การเลือก ไม่ควรสร้างวลีการเลือกจากอินพุตที่ไม่น่าเชื่อถือ

เราพร้อมช่วยเหลือคุณ

หากมีคำถามทางเทคนิคเกี่ยวกับช่องโหว่ คุณโพสต์ถามได้ที่ Stack Overflow และใช้แท็ก “android-security” หากต้องการคำชี้แจงเกี่ยวกับขั้นตอนที่ต้องดำเนินการเพื่อแก้ไขปัญหานี้ โปรดติดต่อทีมสนับสนุนนักพัฒนาซอฟต์แวร์

ข้อมูลนี้มีประโยชน์ไหม
เราจะปรับปรุงได้อย่างไร