Kategori OWASP: MASVS-CODE: Kualitas Kode
Ringkasan
WebView adalah komponen browser tersemat dalam aplikasi Android yang memfasilitasi tampilan konten web dalam aplikasi. WebView merender HTML, CSS, dan JavaScript dalam antarmuka pengguna aplikasi.
Pembuatan Skrip Lintas Aplikasi secara luas terkait dengan eksekusi kode berbahaya dalam konteks pengajuan korban. Untuk tujuan dokumentasi ini, subjek ini secara khusus akan dibatasi dengan injeksi informasi berbahaya kode JavaScript ke WebView yang rentan.
Saat aplikasi menerima JavaScript berbahaya ke dalam WebView tanpa melakukan validasi atau sanitasi, aplikasi rentan terhadap serangan lintas aplikasi Pembuatan skrip.
Dampak
Kerentanan pembuatan skrip lintas aplikasi dapat dieksploitasi saat penyerang dikontrol Konten JavaScript diteruskan ke WebView aplikasi yang rentan tanpa divalidasi atau disanitasi. Akibatnya, kode JavaScript yang disediakan oleh penyerang dieksekusi dalam konteks WebView aplikasi korban. Tujuan kode JavaScript berbahaya dapat menggunakan izin akses yang sama seperti aplikasi milik korban, yang dapat menyebabkan pencurian data pengguna sensitif, dan pembajakan akun.
Mitigasi
Nonaktifkan JavaScript
Jika aplikasi Anda tidak memerlukan JavaScript, menonaktifkannya akan memastikan aplikasi tersebut tidak menjadi ancaman:
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);
Jika aplikasi Anda memerlukan JavaScript, pastikan bahwa Anda memiliki atau mengontrol JavaScript diteruskan ke WebView. Hindari mengizinkan WebView menjalankan JavaScript arbitrer, lihat panduan di bagian berikutnya.
Memastikan hanya konten yang diharapkan yang dimuat ke WebView
Saat menggunakan metode seperti shouldOverrideUrlLoading()
, loadUrl()
, atau
evaluateJavascript()
,
, pastikan URL apa pun yang diteruskan ke metode tersebut
diperiksa. Seperti yang disebutkan sebelumnya, setiap JavaScript yang diteruskan ke WebView hanya boleh
berasal dari domain yang diharapkan, sehingga penting untuk memverifikasi apa yang dimuat.
Lihat dokumentasi validasi input OWASP dan Android ini checklist keamanan untuk WebView untuk mendapatkan saran dan contoh yang bagus.
Menetapkan setelan akses file aman untuk WebView
Memastikan bahwa file tidak dapat diakses dapat mencegah JavaScript arbitrer untuk
dijalankan dalam WebView.WebSettings
berikut harus dijalankan
yang perlu dipertimbangkan saat
mengamankan akses file:
- Nonaktifkan akses file. Secara default,
setAllowFileAccess
ditetapkan keTrue
di API level 29 dan yang lebih rendah yang akan mengizinkan akses ke file lokal. Di level API 30 dan jika lebih tinggi, defaultnya adalahFalse
. Untuk memastikan bahwa akses file tidak diizinkan, tetapkansetAllowFileAccess
secara eksplisit keFalse
Nonaktifkan akses konten. Setelan default
setAllowContentAccess
adalahTrue
. Akses URL konten memungkinkan WebView memuat konten dari konten penyedia yang diinstal di sistem. Jika aplikasi Anda tidak memerlukan akses konten, tetapkansetAllowContentAccess
keFalse
untuk mencegah potensi penyalahgunaan jika terjadi pembuatan skrip lintas aplikasi.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);
Aktifkan Safe Browsing
Aktifkan Safe Browsing di AndroidManifest.xml
untuk memindai URL yang diteruskan
WebView untuk phishing atau domain berbahaya:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
Referensi
- Dokumentasi Safe Browsing
- Referensi developer WebView
- Referensi developer WebSettings untuk WebView
- Dokumentasi developer setAllowFileAccess
- Referensi developer setAllowContentAccess