对于我的Android应用程序,我使用webview来渲染我的网站,我创建了一个javscriptinterface对象来与app和网站进行通信。我想允许其他用户将iframe放入我的网站,但我想是否可以从这些iframe访问我的JS接口对象?
如果可能,如何解决此安全问题?
答案 0 :(得分:0)
是的 - WebView中的所有JavaScript都可以访问相同的JavaScript界面,无论它来自哪个服务器,因为它是在本地执行的。
您可以通过在本地网络上的不同端口上运行两个Python SimpleHTTPServer实例来测试这一点:它们被视为不同的主机(例如XMLHttpRequest将导致跨源请求错误),但您仍然可以从Javascript调用方法即使您的iframe来自不同的主机。
到目前为止,我还没有办法绕过这个。 Android docs建议“仅将addJavaScriptInterface()暴露给应用程序中包含的JavaScript”,但是没有提到如何实现这一点。
当Java对象传递给Javascript,并且所有Javascript都在WebView的上下文中执行时,我猜想由WebView / WebViewProvider的Android实现提供这样的方法,但是Marshmallow的addJavascriptInterface就Java框架而言,()是空的(参见WebView.java和WebViewProvider.java)。它没有use to be,所以也许那就是安全文档的来源。
答案 1 :(得分:0)
我想可能会采用一种特殊技术。例如,网页可能会调用解锁API的方法。嵌入应用程序应该调用将在主框架中执行的evaluateJavascript方法,并将安全密钥传递给主框架的JavaScript世界。所有对API方法的调用都应该使用此键作为参数进行请求。