使用Webview/javascript的Android应用程序,什么可能是安全问题?

r1zk6ea1  于 2023-01-28  发布在  Android
关注(0)|答案(3)|浏览(139)

我正在使用Webview创建一个android网络应用程序,并通过addJavascriptInterface(true)启用Javascript
我的应用程序将包含将从外部站点加载的html数据。
我很担心我的应用程序的 * 跨站点脚本XSS/安全性 *,因为我正在启用addJavascript接口(true)。
我应该注意哪些事项,以防止任何恶意代码在我的应用上运行?

9rnv2umw

9rnv2umw1#

我发现锡拉丘兹University)有一项名为Attacks on WebView in the Android System的优秀研究,该研究说明了将WebViewaddJavascriptInterface(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);

这是一个伟大的研究,并概述了几种不同的攻击方式。值得一读!

0x6upsns

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

iovurdzv

iovurdzv3#

我写这个gist是为了帮助锁定Android的Webview,类似于@Noni A的答案,它只允许通过覆盖shouldOverrideUrlLoading加载白名单URL,但我相信shouldInterceptRequest是由 AJAX 类型调用使用的。

相关问题