我们希望使用股票Android WebView作为沙箱来执行本地HTML/JS应用程序.主要的安全性要求是将WebView设置为完全脱机,并且只允许调用某些javascript接口.使用WebView.addJavascriptInterface()方法将这些接口传递到javascript运行时.
Android应用程序本身具有访问网络的权限(android.permission.INTERNET).
我能够禁用正常的http/https请求,但完全无法阻止WebSocket请求.看起来这些处理与普通的http请求不同.
一种替代方法是覆盖WebSocket JavaScript方法.但是这让我感觉不好,因为它违背了沙箱的概念.似乎也可以使用delete来恢复原始函数指针.
另一种方法是将自己的自定义WebView(例如Crosswalk-Project)与我们的应用程序捆绑在一起,但是想要避免它,因为编译和更新是相当费力的.
我尝试了以下公共WebView接口,但它们似乎都没有阻止WebSocket调用:
在Android 4.4.4(19)和Android 5/5.1(21/22)上测试过.
我正在执行的javascript:
ws = new WebSocket("wss://echo.websocket.org");
ws.onmessage = function(event) {
console.log("received: " + event.data);
};
ws.onclose = function() {
console.log("External Socket closed");
};
ws.onopen = function() {
console.log("Connected to external ws");
ws.send("Hello from " + navigator.userAgent);
};
Run Code Online (Sandbox Code Playgroud)
有什么想法可以做到这一点?
非常感谢