webview白名单

本文介绍了在Android开发中,针对Webview的安全措施,如在loadUrl、shouldOverrideUrlLoading中添加白名单验证,并通过Java的URI类提取域名。强调了避免使用indexOf进行模糊匹配,不建议使用HTTP协议,以及权限最小化原则。同时警告了即使有白名单,仍可能存在XSS攻击、服务器被控制或中间人攻击的风险。提供了代码示例作为参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.添加白名单验证的时机

1.loadurl
2.shouldOverRideUrlLoading
3.如果需要对白名单进行安全等级划分,还需要在JavascriptInterface中加入校验函数,JavascriptInterface中需要使用webview.getUrl()来获取webview当前所在域
风险提示:
上面这些都做了还有可能被攻击,比如白名单中的服务器存在XSS漏洞,或者白名单中的服务器被攻击者控制,或者webview访问没有采用安全的传输通道导致被中间人劫持等,都可以在白名单信任域中注入恶意JavaScript

2.代码实现

private  boolean checkDomain(String inputUrl) throws  URISyntaxException {
    if (!inputUrl.startsWith("http://")&&!inputUrl.startsWith("https://"))     {
       //重要提醒:建议只使用https协议通信,避免中间人攻击
        return false;
    }
    String[] whiteList=new String[]{"site1.com","site2.com"};
    java.net.URI url=new java.net.URI(inputUrl);
    String inputDomain=url.getHost(); 
    //提取host,如果需要校验Path可以通过url.getPath()获取
    for (String whiteDomain:whiteList)
    {
        if (inputDomain.endsWith("."+whiteDomain)||inputDomain.equals(whiteDomain)) //www.site1.com      app.site2.com
            return true;
    }
    return  false;
}

可以总结为如下几条开发建议:
不要使用indexOf这种模糊匹配的函数;
不要自己写正则表达式去匹配;
尽量使用Java封装好的获取域名的方法,比如java.net.URI,不要使用java.net.URL;
不仅要给域名设置白名单,还要给协议设置白名单,一般常用HTTP和HTTPS两种协议,不过强烈建议不要使用HTTP协议,因为移动互联网时代,手机被中间人攻击的门槛很低,搭一个恶意WiFi即可劫持手机网络流量;
权限最小化原则,尽量使用更精确的域名或者路径。
当然上述代码可能不完全符合业务开发需求,这里只是给大家一个参考,大家可以参考本文的案例自己开发出更适合的校验方法。

本博是学习自这篇博客
https://blog.youkuaiyun.com/weixin_33816946/article/details/94607053

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值