我发现锡拉丘兹University)有一项名为Attacks on WebView in the Android System的优秀研究,该研究说明了将WebView与addJavascriptInterface(true)配合使用会引发两种攻击。一种是来自恶意网站的攻击,该网站现在可以通过你分配给界面的电话服务访问你的应用(例如通讯录、相机等)或两个,恶意应用程序可以通过在其Javascript中插入代码来访问易受攻击的网站。 对于应用程序开发人员来说,基本上解决办法是确保在WebView中,除了预期的URL之外,不允许在WebView中查看其他URL。例如,假设您将www.example.com嵌入Facebook.com到WebView中,您可以编写代码来确保如果Facebook中的任何其他广告被点击,外部浏览器将打开而不是显示在您的WebView中。这是通过iFrames最常见的...尽管本文对此进行了更深入的讨论。 下面是他们提供的示例,该示例确保在WebView中除了最初预期的URL之外不会看到其他URL:
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);
3条答案
按热度按时间9rnv2umw1#
我发现锡拉丘兹University)有一项名为Attacks on WebView in the Android System的优秀研究,该研究说明了将
WebView
与addJavascriptInterface(true)
配合使用会引发两种攻击。一种是来自恶意网站的攻击,该网站现在可以通过你分配给界面的电话服务访问你的应用(例如通讯录、相机等)或两个,恶意应用程序可以通过在其Javascript中插入代码来访问易受攻击的网站。对于应用程序开发人员来说,基本上解决办法是确保在
WebView
中,除了预期的URL之外,不允许在WebView中查看其他URL。例如,假设您将www.example.com嵌入Facebook.com到WebView
中,您可以编写代码来确保如果Facebook中的任何其他广告被点击,外部浏览器将打开而不是显示在您的WebView
中。这是通过iFrames最常见的...尽管本文对此进行了更深入的讨论。下面是他们提供的示例,该示例确保在
WebView
中除了最初预期的URL之外不会看到其他URL:这是一个伟大的研究,并概述了几种不同的攻击方式。值得一读!
0x6upsns2#
当您为4.2之前的webview启用javascript时,其中存在漏洞。
启用Javascript的使用:
启用JavaScript后,您可以在应用程序代码和JavaScript代码之间创建接口。
addJavascript接口(对象对象,字符串名称)方法:
addJavascript接口方法将提供的Java对象注入WebView。
使用提供的名称将对象注入到主框架的JavaScript上下文中,这允许从JavaScript访问Java对象的方法。
对于运行Android 4.1或更早版本的应用程序,可以访问所有公共方法(包括继承的方法),因此当用户安装的应用程序使用addJavascript接口方法加载外部网页时,它可以使用WebView和Javascript调用Java对象(如“Javascript管道”和使用反射调用任何其他未注册的Java类),这使得攻击者能够调用Android的Java方法。
修复方法:
对于运行Android 4.2的应用,所有使用Javascript接口注解的公共方法都可以从JavaScript访问。
因此,如果您为SDK版本17或更高版本开发应用程序,则必须将@JavascriptInterface注解添加到希望JavaScript可用的任何方法中。
如果您不提供注解,则在Android 4.2或更高版本上运行时,您的网页无法访问该方法。
Reference
iovurdzv3#
我写这个gist是为了帮助锁定Android的Webview,类似于@Noni A的答案,它只允许通过覆盖
shouldOverrideUrlLoading
加载白名单URL,但我相信shouldInterceptRequest
是由 AJAX 类型调用使用的。