Oli*_* M. 5 javascript android offline webview
我们希望使用股票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)
有什么想法可以做到这一点?
非常感谢
不幸的是,目前无法在 WebView 中拦截 WebSockets 调用。您只能阻止整个 JavaScript 执行或网络访问。您是对的,WebSocket通过删除覆盖的 window 属性,可以轻松解决尝试使用自己的实现覆盖构造函数的问题,因此可以从原型链访问的内置构造函数window再次可见。WebSocket如果您尝试使用覆盖,也会发生同样的情况WebView.addJavascriptInterface。
我认为,HTML 应用程序缓存也不会被 WebView 回调拦截,甚至不需要打开 Javascript 即可工作。
我想,使用系统 WebView 创建 WebView 网络沙箱的唯一机会是使用没有网络访问权限的专用应用程序,并使用Binder IPC与其通信。
捆绑定制的 WebView 会带来更多困难,因为您需要找出并堵住所有漏洞,然后继续自行更新安全修复程序。
| 归档时间: |
|
| 查看次数: |
836 次 |
| 最近记录: |