我有一个像浏览器一样的应用程序,并在android webview中显示结果。其中,一些结果是从我自己的服务器呈现的,并使用javascriptInterface对象来调用Java方法。
内部WebviewClient shouldOverrideUrlLoading()方法,我只为我的服务器的选择性url添加了javascriptInterface,并删除了javascriptInterface以便剩余网址如下所示:
if(url.contains("mypage1.html")||url.contains("mypage2.html")){
webView.addJavascriptInterface(new JavaScriptInterface(),"XYZ");
}
else {
webView.removeJavascriptInterface("XYZ");
}
包含恶意javascript的虚拟网址 myevilpage.html 也会随 mypage1.html 和 mypage2.html 一起加载。我已经确认 myevilpage.html javascript无法调用Java方法。
此方法是否可以确保除了我的特定网址之外没有其他网址可以使用javascriptInterface进行绑定桥梁?
我已经提到以下链接:
http://www.rapid7.com/db/modules/exploit/android/browser/webview_addjavascriptinterface
Android App using Webview/javascript. what can be security concern?
Android JavascriptInterface Security? < BR />
答案 0 :(得分:1)
这种方法是否可以确保除了我的特定网址之外没有其他网址可以使用javascriptInterface网桥绑定?
没有。您正在使用contains()
而非equals()
,因此攻击者可以轻而易举地制作恰好具有这些子字符串的网址。此外,可能存在计时问题,因为您在加载该页面之前确定了JS接口的可用性,这意味着您将立即影响当前加载的页面。
仍然会有其他可能的攻击(例如,代理服务器,这些网页通过广告网络或其他第三方来源提供的恶意JS)URL检测无法捕获,但解决这些问题最多也是困难的。