หมวดหมู่ OWASP: MASVS-CODE: คุณภาพโค้ด
ภาพรวม
WebView เป็นคอมโพเนนต์เบราว์เซอร์ที่ฝังอยู่ในแอปพลิเคชัน Android ที่ อำนวยความสะดวกในการแสดงเนื้อหาเว็บภายในแอป แสดงผล HTML, CSS และ JavaScript ภายในอินเทอร์เฟซผู้ใช้ของแอป
Cross-App Scripting โดยทั่วไปเกี่ยวข้องกับการเรียกใช้โค้ดที่เป็นอันตรายในบริบทของแอปพลิเคชันที่เป็นเหยื่อ เพื่อให้เป็นไปตามจุดประสงค์ของเอกสารนี้ เนื้อหาจะถูกจํากัดเฉพาะ การแทรกที่เป็นอันตราย โค้ด JavaScript ลงใน WebView ที่มีช่องโหว่
เมื่อแอปยอมรับ JavaScript ที่เป็นอันตรายใน WebView โดยไม่มีการตรวจสอบหรือการทำให้ปลอดภัยที่เพียงพอ แอปพลิเคชันจะมีช่องโหว่ในการเขียนสคริปต์ข้ามแอป
ผลกระทบ
ช่องโหว่ในการเขียนสคริปต์ข้ามแอปอาจถูกนำไปใช้ประโยชน์เมื่อถูกควบคุมโดยผู้โจมตี ระบบจะส่งเนื้อหา JavaScript ไปยัง WebView ของแอปที่มีช่องโหว่โดยไม่ ผ่านการตรวจสอบความถูกต้องหรือสะอาดแล้ว ด้วยเหตุนี้ โค้ด JavaScript ที่ผู้โจมตีระบุจึงจะทำงานในบริบทของ WebView ของแอปพลิเคชันเหยื่อ จากนั้นโค้ด JavaScript ที่เป็นอันตรายจะใช้สิทธิ์เดียวกันกับของแอปที่เป็นเหยื่อได้ ซึ่งอาจนำไปสู่การขโมยข้อมูลผู้ใช้ที่มีความละเอียดอ่อนและการลักลอบใช้บัญชี
การลดปัญหา
ปิดใช้ JavaScript
หากแอปพลิเคชันของคุณไม่ต้องใช้ JavaScript การปิดใช้จะทำให้มั่นใจได้ว่า จะไม่เป็นภัยคุกคาม:
Kotlin
// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings
// Disable JavaScript
webSettings.javaScriptEnabled = false
Java
// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);
หากแอปพลิเคชันของคุณต้องใช้ JavaScript โปรดตรวจสอบว่าคุณเป็นเจ้าของหรือเป็นผู้ควบคุม JavaScript ที่ส่งไปยัง WebView หลีกเลี่ยงการอนุญาตให้ WebView ดำเนินการโดยไม่มีกฎเกณฑ์ JavaScript ดูคำแนะนำในส่วนถัดไป
ตรวจสอบว่ามีการโหลดเฉพาะเนื้อหาที่คาดไว้ลงใน WebView
เมื่อใช้วิธีการ เช่น shouldOverrideUrlLoading()
, loadUrl()
หรือ
evaluateJavascript()
,
ตรวจสอบว่า URL ที่ส่งไป
เลือกไว้ ดังที่กล่าวไว้ก่อนหน้านี้ JavaScript ที่ส่งไปยัง WebView ควรมาจากโดเมนที่คาดไว้เท่านั้น ดังนั้นจึงต้องตรวจสอบสิ่งที่โหลด
โปรดดูคําแนะนําและตัวอย่างที่เป็นประโยชน์ในเอกสารประกอบการตรวจสอบอินพุตของ OWASP และรายการตรวจสอบความปลอดภัยของ Android สําหรับ WebView
ตั้งค่าการเข้าถึงไฟล์ที่ปลอดภัยสำหรับ WebView
การตรวจสอบว่าไฟล์เข้าถึงไม่ได้จะช่วยป้องกันไม่ให้ JavaScript เรียกใช้ภายใน WebView ได้โดยพลการ คุณควรพิจารณา WebSettings
ต่อไปนี้เมื่อต้องการรักษาความปลอดภัยการเข้าถึงไฟล์
- ปิดใช้การเข้าถึงไฟล์ โดยค่าเริ่มต้น
setAllowFileAccess
จะตั้งค่าเป็นTrue
ใน API ระดับ 29 และต่ำกว่า ซึ่งจะอนุญาตให้เข้าถึงไฟล์ในเครื่องได้ ใน API ระดับ 30 และสูงกว่า ค่าเริ่มต้นคือFalse
เพื่อป้องกันไม่ให้สิทธิ์การเข้าถึงไฟล์ ตั้งค่าsetAllowFileAccess
เป็นFalse
อย่างชัดเจน ปิดการเข้าถึงเนื้อหา การตั้งค่าเริ่มต้นของ
setAllowContentAccess
คือTrue
การเข้าถึง URL ของเนื้อหาช่วยให้ WebView โหลดเนื้อหาจากผู้ให้บริการเนื้อหาที่ติดตั้งในระบบได้ หากแอปไม่จำเป็นต้องเข้าถึงเนื้อหา ตั้งค่าsetAllowContentAccess
เป็นFalse
เพื่อป้องกันการใช้งานในทางที่ผิดที่อาจเกิดขึ้นในกรณี การโจมตีด้วยการเขียนสคริปต์ข้ามแอปkotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false
java
java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);
เปิดใช้ Google Safe Browsing
เปิดใช้ Google Safe Browsing ใน AndroidManifest.xml
เพื่อสแกน URL ที่ส่งไปยัง WebView เพื่อหาโดเมนที่เป็นฟิชชิงหรือเป็นอันตราย
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
แหล่งข้อมูล
- เอกสารประกอบของ Google Safe Browsing
- ข้อมูลอ้างอิงสําหรับนักพัฒนาซอฟต์แวร์ WebView
- WebSettings สําหรับข้อมูลอ้างอิงของนักพัฒนาแอป WebView
- เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์เกี่ยวกับ setAllowFileAccess
- ข้อมูลอ้างอิงจากนักพัฒนาซอฟต์แวร์ setAllowContentAccess