WebView
1.5.0前支持https与http混合使用,5.0后不行,所以webView加载https图片加载不出来
2. Android WebView存在跨域访问漏洞(CNVD-2017-36682)介绍及解决
//webView 漏洞防护
mWebView.getSettings().setAllowFileAccess(false);
mWebView.getSettings().setAllowFileAccessFromFileURLs(false);
mWebView.getSettings().setAllowUniversalAccessFromFileURLs(false);
漏洞修复建议
厂商暂未发布解决方案,临时解决方案如下:
a. file域访问为非功能需求时,手动配置setAllowFileAccessFromFileURLs或setAllowUniversalAccessFromFileURLs两个API为false。(Android4.1版本之前这两个API默认是true,需要显式设置为false)
b. 若需要开启file域访问,则设置file路径的白名单,严格控制file域的访问范围,具体如下:
(1)固定不变的HTML文件可以放在assets或res目录下,file:///android_asset和file:///android_res 在不开启API的情况下也可以访问;
(2)可能会更新的HTML文件放在/data/data/(app) 目录下,避免被第三方替换或修改;
(3)对file域请求做白名单限制时,需要对“../../”特殊情况进行处理,避免白名单被绕过。
c. 避免App内部的WebView被不信任的第三方调用。排查内置WebView的Activity是否被导出、必须导出的Activity是否会通过参数传递调起内置的WebView等。
- 建议进一步对APP目录下的敏感数据进行保护。客户端APP应用设备相关信息(如IMEI、IMSI、Android_id等)作为密钥对敏感数据进行加密。使攻击者难以利用相关漏洞获得敏感信息
3.webView 清除history
webView.setWebViewClient(new WebViewClient() {
@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
super.doUpdateVisitedHistory(view, url, isReload);
if (needClearHistory) {
needClearHistory = false;
view.clearHistory();//清除历史记录
}
}
});
4.Finish时webView的 内核渲染需要暂停,JS不会停,所以不暂停可能会导致音频播放什么还会存在,多进程不存在此问题
Does a best-effort attempt to pause any processing that can be paused safely, such as animations and geolocation. Note that this call does not pause Java. To pause Java globally, use pauseTimers(). To resume WebView, call onResume().
通知内核尝试停止所有处理,如动画和地理位置,但是不能停止Js,如果想全局停止Js,可以调用pauseTimers()全局停止Js,调用onResume()恢复。
5.JSBridge桥接原理
6.Cookie问题,手写CookieManager
7.不能混淆桥接接口名
8.Cookie同步
基于session的登录验证:
基于session的登录验证,会在程序请求接口的时候判断服务器端是否有当前会话的session,如果没有则被认为没有登录。客户端没有session这一概念,但有cookie与其对应。每一个session都有一个session id作为唯一标识。在登录成功后服务器会在请求头中返回cookie,cookie包含着这次登录会话的session id,在接下来的请求中只需要将登陆返回的cookie设置到请求头中便可以通过验证。
待补全...