หมวดหมู่ OWASP: MASVS-CODE: คุณภาพโค้ด
ภาพรวม
WebView เป็นคอมโพเนนต์เบราว์เซอร์ที่ฝังอยู่ในแอปพลิเคชัน Android ซึ่งช่วยให้แสดงเนื้อหาเว็บภายในแอปได้ โดยจะแสดงผล HTML, CSS และ JavaScript ภายในอินเทอร์เฟซผู้ใช้ของแอป
Cross-App Scripting เกี่ยวข้องกับการเรียกใช้โค้ดที่เป็นอันตรายในบริบทของแอปพลิเคชันเหยื่อโดยทั่วไป สำหรับเอกสารนี้ เราจะจำกัดขอบเขตเฉพาะการแทรกโค้ด JavaScript ที่เป็นอันตรายลงใน WebView ที่มีช่องโหว่
เมื่อแอปยอมรับ JavaScript ที่เป็นอันตรายลงใน WebView โดยไม่มีการตรวจสอบหรือล้างข้อมูลที่เพียงพอ แอปพลิเคชันนั้นจะมีช่องโหว่ต่อการถูกโจมตีแบบ Cross-App Scripting
ผลกระทบ
ช่องโหว่ Cross-App Scripting อาจถูกใช้ประโยชน์ได้เมื่อมีการส่งเนื้อหา JavaScript ที่ผู้โจมตีควบคุมไปยัง WebView ของแอปที่มีช่องโหว่โดยไม่มีการตรวจสอบหรือล้างข้อมูล ด้วยเหตุนี้ โค้ด JavaScript ที่ผู้โจมตีให้มาจึงถูกเรียกใช้ในบริบทของ WebView ของแอปพลิเคชันเหยื่อ จากนั้นโค้ด JavaScript ที่เป็นอันตรายจะใช้สิทธิ์เดียวกันกับแอปของเหยื่อ ซึ่งอาจนำไปสู่การขโมยข้อมูลผู้ใช้ที่ละเอียดอ่อนและการยึดบัญชี
การบรรเทาผลกระทบ
ปิดใช้ JavaScript
หากแอปพลิเคชันไม่จำเป็นต้องใช้ 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เพื่อป้องกันการใช้ในทางที่ผิดที่อาจเกิดขึ้นในกรณีที่มีการโจมตีแบบ Cross-App Scriptingkotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = falsejava
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