我正在創建一個使用Webview
和Javascript
製作的addJavascriptInterface(true)
的Android網絡應用程序。使用Webview/javascript的Android應用程序。什麼可能是安全問題?
我的應用程序將會從外部網站加載的內容數據(html)。
我擔心我的應用程序的跨站點腳本XSS /安全,因爲我使addJavascriptInterface(真)。
我應該注意些什麼,以防止任何惡意代碼在我的應用上運行?
我正在創建一個使用Webview
和Javascript
製作的addJavascriptInterface(true)
的Android網絡應用程序。使用Webview/javascript的Android應用程序。什麼可能是安全問題?
我的應用程序將會從外部網站加載的內容數據(html)。
我擔心我的應用程序的跨站點腳本XSS /安全,因爲我使addJavascriptInterface(真)。
我應該注意些什麼,以防止任何惡意代碼在我的應用上運行?
有一個在網頁視圖漏洞比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或更高版本上運行時的方法不是通過你的網頁訪問。
我發現從雪城大學良好的學習稱爲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);
這是一個偉大的研究,並概述了攻擊的幾種不同的方式。值得一讀!
在這個頁面的答案值得更多upvotes。 –
這不會防止mitms如果白名單頁面含有不安全內容。 – Antimony
我寫這個gist幫助通過重寫shouldOverrideUrlLoading
而且shouldInterceptRequest
我相信這是使用AJAX呼叫類型鎖定下來Android的網頁視圖,類似@Noni A的答案只允許加載白名單網址。
FYI:以下鏈接討論問題的深度。 http://arstechnica.com/security/2013/09/attackers-can-slip-malicious-code-into-many-android-apps-via-open-wi-fi/。 –
我想你的意思是,當你添加* JavascriptInterface *給它,然後將其添加通過反射來訪問本地Java的東西的能力。 – NoBugs
是的,你是對的。 –