2013-04-01 50 views
14

我正在創建一個使用WebviewJavascript製作的addJavascriptInterface(true)的Android網絡應用程序。使用Webview/javascript的Android應用程序。什麼可能是安全問題?

我的應用程序將會從外部網站加載的內容數據(html)。

我擔心我的應用程序的跨站點腳本XSS /安全,因爲我使addJavascriptInterface(真)。

我應該注意些什麼,以防止任何惡意代碼在我的應用上運行?

回答

14

有一個在網頁視圖漏洞比4.2年長當你啓用它的JavaScript

使用使能的Javascript:

一旦啓用JavaScript,你可以創建你的應用程序代碼和JavaScript代碼之間的接口。

addJavascriptInterface(Object對象,字符串名稱)方法:

的addJavascriptInterface方法注入一個提供的Java對象轉換成web視圖。

對象被注入到主框架的JavaScript的上下文中,使用提供的名稱和這允許從JavaScript訪問的Java對象的方法。

對於運行Android 4.1或更早版本的應用程序,可以訪問所有公共方法(包括繼承的方法),因此當用戶使用addJavascriptInterface方法安裝的應用程序加載外部網頁時,可以使用WebView和JavaScript調用Java對象比如'Javascript管道'和使用反射來調用任何其他未註冊的Java類),這使得攻擊者可以調用Android的Java方法。

的修復:

對於應用程序運行Android 4.2被標註了JavascriptInterface所有公共方法可以從JavaScript訪問。

所以,如果你開發SDK版本17或更高版本的應用程序,您必須將@JavascriptInterface註釋添加到您希望提供給您的JavaScript的任何方法。

如果不提供批註,在Android 4.2或更高版本上運行時的方法不是通過你的網頁訪問。

Reference

+1

FYI:以下鏈接討論問題的深度。 http://arstechnica.com/security/2013/09/attackers-can-slip-malicious-code-into-many-android-apps-via-open-wi-fi/。 –

+0

我想你的意思是,當你添加* JavascriptInterface *給它,然後將其添加通過反射來訪問本地Java的東西的能力。 – NoBugs

+0

是的,你是對的。 –

14

我發現從雪城大學良好的學習稱爲Attacks on WebView in the Android System,這說明了如何使用與addJavascriptInterface(true)一個WebView可以實現兩個類型的攻擊。一,從惡意網站,現在可以通過您分配給界面的電話服務(例如聯繫人,相機等)訪問您的應用程序,惡意應用程序可以訪問易受攻擊的網站,方法是將代碼插入它的Javascript。

基本上爲應用程序開發人員的解決方法是,以確保在WebView,比預期沒有其它的URL中可以使用的WebView進行查看。例如,假設您嵌入Facebook.com到您的WebView,您可以編寫代碼,以確保如果點擊Facebook的任何其他廣告,該外部瀏覽器將打開,而不是在你的WebView顯示。這是通過iFrames最常見的......儘管文章更深入地討論了這一點。

這裏是例子,他們呈現確保沒有其他網址是不是一個原本打算等一個WebView觀察:

WebViewclient wvclient = New WebViewClient() { 
    // override the "shouldOverrideUrlLoading" hook. 
    public boolean shouldOverrideUrlLoading(WebView view,String url){ 
    if(!url.startsWith("http://www.facebook.com")){ 
    Intent i = new Intent("android,intent.action.VIEW", 
    Uri.parse(url)); 
    startActivity(i); 
    } 
} 
// override the "onPageFinished" hook. 
public void onPageFinished(WebView view, String url) { ...} 
} 
webView.setWebViewClient(wvclient); 

這是一個偉大的研究,並概述了攻擊的幾種不同的方式。值得一讀!

+0

在這個頁面的答案值得更多upvotes。 –

+0

這不會防止mitms如果白名單頁面含有不安全內容。 – Antimony

0

我寫這個gist幫助通過重寫shouldOverrideUrlLoading而且shouldInterceptRequest我相信這是使用AJAX呼叫類型鎖定下來Android的網頁視圖,類似@Noni A的答案只允許加載白名單網址。

相關問題