การเขียนสคริปต์ข้ามแอป

หมวดหมู่ 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" />

แหล่งข้อมูล