You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击页脚社交链接触发CSP 'unsafe-eval'错误的解决咨询

问题根因

该报错仅出现在SDK26(Android 8.0)设备的核心原因是该版本预装的系统WebView内核版本较低,跨域跳转第三方站点时会错误复用当前本地页面的Content Security Policy(CSP)规则进行校验,第三方社交平台的页面脚本逻辑触发了unsafe-eval校验规则。更高版本的WebView内核优化了跨域跳转后的CSP作用域判定逻辑,因此不会出现该报错,和应用目标SDK30的配置无直接冲突。

安全解决方案(无需添加unsafe-eval,符合谷歌Play上架要求)

优先按优先级选择方案:

  • 方案1:站外链接跳转系统浏览器打开(最安全,首选)
    给应用内WebView配置跳转拦截逻辑,所有非自身站点的链接直接跳转到系统浏览器加载,既不需要调整CSP规则,也完全规避了应用内WebView加载第三方站点的XSS风险,适配代码示例如下:
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            String url = request.getUrl().toString();
            // 替换为你自身站点的域名前缀,站内链接继续在WebView加载
            if (url.startsWith("https://www.your-site-domain.com/")) {
                return false;
            }
            // 站外链接调用系统浏览器打开
            Intent browseIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            view.getContext().startActivity(browseIntent);
            return true;
        }
    });
    
  • 方案2:调整本地页面CSP规则,补充第三方域名白名单
    如果业务要求必须在应用内WebView加载第三方社交站,可修改本地HTML页面的CSP响应头/meta标签,补充第三方站点的脚本白名单,无需添加unsafe-eval即可解决报错:
    <meta http-equiv="Content-Security-Policy" content="script-src 'self' https://twitter.com https://*.twitter.com https://instagram.com https://*.instagram.com https://facebook.com https://*.facebook.com;">
    
  • 方案3:针对SDK26做单独兼容
    仅对Android 8.0设备开放WebView的对应脚本权限,高版本保持原有严格配置,尽可能降低安全风险:
    WebSettings settings = webView.getSettings();
    // 仅SDK26单独配置,其余版本保持原有规则
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) {
        settings.setJavaScriptEnabled(true);
        // 禁用不必要的权限降低风险
        settings.setAllowFileAccess(false);
        settings.setAllowContentAccess(false);
    }
    

内容的提问来源于stack exchange,提问作者Bubba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 07:30:02