[关闭]
@xiaoyixy 2015-10-31T10:34:08.000000Z 字数 1508 阅读 2328

HttpOnly 标识的 Cookies 、安全标识 和域名白名单

Hybrid


HttpOnly 标识的 Cookies 、安全标识

    Cookies 是开发者存储应用数据的众多方法之一,他被用来“记住” Web 应用程序先前的运行状态。通过未添加信任的 JavaScript 来访问数据可能使你的应用程序面临巨大的风险,为了防止这种事情发生,可以在 HTTP 响应器中设置 cookies HttpOnly 标识。 HttpOnly cookies 标识已经成为一个有着 RFC #6265 文档的标准,可在ietf.org 网站查看详情。
    一个 HttpOnly 标识的 cookies 很难通过非 HTTP 的方法例如使用 JavaScript 或 Flash 的 document.cookies 作为一项普遍应用的攻击技术来轻松获取。下面是 HttpOnly 属性如何在 HTTP 头部显示的实例:

    HTTP/1.1 200 OK
    Content-Type: text/html; charset=utf-8
    Set-Cookie: id=cdb6352b48e62e0691efe552e3e4cecb; path=/; HttpOnly

    如果你使用 SSL 协议来创建你的 web 内容并且需要通过 JavaScript 设置cookies,为了设置安全的 cookies,需要在你的 cookies 函数中允许安全标识。

    document.cookie = "name=value; expires=date; path=path; domain=domain; secure";

    Android 开发者网站有许多关于 WebView 安全的建议,可进行查看。

域名白名单

    如果应用需要导向一个外部的链接,开发者可以创建一个可在 WebView 中访问的域名列表进行授权,使用的方法是 shouldOverrideUrlLoading(WebView view, String url):

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (!Uri.parse(url).getHost().equals("www.oreilly.com")) {
        return false;
    }
    view.loadUrl(url);
    return true;
}

注意:
    在 shouldOverrideUrlLoading(WebView view, String url) 方法中限制加载远程资源不会拦截来自 IFRAME, XmlHttpRequests, Ajax Object, and HTTP 标签中的 SRC 属性的请求。解决这一问题的一个方法是拦截这些请求并且向视窗中加载不同的内容。

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    if (url.contains(".js")) {
        String str = "alert('This is a replaced JavaScript code.')";
        InputStream is = null;
        try {
            is = new ByteArrayInputStream(str.getBytes("UTF8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        String type = "application/JavaScript";
        return new WebResourceResponse(type, "UTF-8", is);
    }
    return super.shouldInterceptRequest(view, url);
}
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注