OWASP kategorisi: MASVS-CODE: Kod Kalitesi
Genel Bakış
WebView, Android uygulamalarına yerleştirilmiş bir tarayıcı bileşenidir ve web içeriğinin uygulama içinde gösterilmesini kolaylaştırır. HTML, CSS ve JavaScript'i uygulamanın kullanıcı arayüzünde oluşturur.
Uygulama Arası Komut Dosyası Çalıştırma, genel olarak kötü amaçlı kodun kurban uygulama bağlamında yürütülmesiyle ilişkilendirilir. Bu dokümantasyonun amaçları doğrultusunda konu, özellikle güvenlik açığı olan bir WebView'a kötü amaçlı JavaScript kodu ekleme ile sınırlı olacaktır.
Bir uygulama, yeterli doğrulama veya temizleme olmadan kötü amaçlı JavaScript'i WebView'e kabul ettiğinde uygulama, uygulama genelinde komut dosyası güvenlik açığına karşı savunmasız kalır.
Etki
Uygulamalar arası komut dosyası güvenlik açıkları, saldırgan tarafından kontrol edilen JavaScript içeriği doğrulanmadan veya temizlenmeden güvenlik açığı olan uygulamanın WebView'ına aktarıldığında kötüye kullanılabilir. Sonuç olarak, saldırgan tarafından sağlanan JavaScript kodu, kurban uygulamasının WebView'u bağlamında yürütülür. Kötü amaçlı JavaScript kodu daha sonra saldırıya uğrayan uygulamanın izinlerini kullanabilir. Bu durum, hassas kullanıcı verilerinin çalınmasına ve hesabın ele geçirilmesine yol açabilir.
Çözümler
JavaScript'i devre dışı bırak
Uygulamanızın JavaScript gerektirmemesi durumunda, JavaScript'i devre dışı bırakmak uygulamanızın tehdit oluşturmasını önler:
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);
Uygulamanız JavaScript gerektiriyorsa WebView'a iletilen tüm JavaScript'in sahibi veya denetleyicisi olduğunuzdan emin olun. WebView'ın rastgele JavaScript yürütmesine izin vermeyin. Sonraki bölümdeki yönergeleri inceleyin.
WebView'a yalnızca beklenen içeriğin yüklendiğinden emin olun
shouldOverrideUrlLoading(), loadUrl() veya evaluateJavascript(), gibi yöntemleri kullanırken bunlara iletilen tüm URL'lerin kontrol edildiğinden emin olun. Daha önce belirtildiği gibi, WebView'a iletilen tüm JavaScript'ler yalnızca beklenen alanlardan gelmelidir. Bu nedenle, yüklenenlerin doğrulanması önemlidir.
İyi tavsiyeler ve örnekler için OWASP'nin giriş doğrulama dokümanlarını ve WebView'lar için bu Android güvenlik kontrol listesini inceleyin.
WebView için güvenli dosya erişimi ayarlarını belirleme
Dosyalara erişilememesini sağlamak, WebView'larda rastgele JavaScript'in yürütülmesini önleyebilir.Dosya erişimini güvenli hale getirirken aşağıdaki WebSettings dikkate alınmalıdır:
- Dosya erişimini devre dışı bırakın. Varsayılan olarak,
setAllowFileAccess, API düzeyi 29 ve daha düşük sürümlerdeTrueolarak ayarlanır. Bu, yerel dosyalara erişime izin verir. API düzeyi 30 ve sonraki sürümlerde varsayılan değerFalse'dır. Dosya erişimine izin verilmediğinden emin olmak içinsetAllowFileAccessdeğerini açıkçaFalseolarak ayarlayın. İçeriğe erişimi devre dışı bırakın.
setAllowContentAccessiçin varsayılan ayarTrue'dir. İçerik URL'sine erişim, WebView'un sistemde yüklü bir içerik sağlayıcıdan içerik yüklemesine olanak tanır. Uygulamanız içerik erişimi gerektirmiyorsa uygulamalar arası komut dosyası saldırısı durumunda olası kötüye kullanımı önlemek içinsetAllowContentAccessdeğeriniFalseolarak ayarlayın.kotlin
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);
Güvenli Taramayı etkinleştir
WebView'a iletilen URL'leri kimlik avı veya kötü amaçlı alanlar için taramak üzere AndroidManifest.xml içinde Güvenli Tarama'yı etkinleştirin:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
Kaynaklar
- Güvenli Tarama dokümanları
- WebView geliştirici referansı
- WebView geliştirici referansı için WebSettings
- setAllowFileAccess geliştirici belgeleri
- setAllowContentAccess geliştirici referansı