WebView暴露JavaScript接口后如何防范XSS攻击?

书生シ喜静 阅读 61

我在开发Android混合应用时,通过WebView的addJavascriptInterface暴露了一个本地方法,但测试时发现可以通过XSS注入执行任意JS。尝试过设置webView.getSettings().setJavaScriptEnabled(true)setMixedContentMode(NEVER),但没用。代码是这样的:


webView.addJavascriptInterface(new JsBridge(), "AndroidBridge");
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedError(WebView view, WebResourceError error) {
        super.onReceivedError(view, error);
    }
});

现在输入框里的内容直接传给eval执行,发现恶意输入能调用AndroidBridge的方法。除了给参数做转义,还有哪些安全措施能彻底防止这种攻击?

我来解答 赞 7 收藏
二维码
手机扫码查看
1 条解答
南宫朝炜
暴露JavaScript接口确实容易被XSS利用,我一般直接在接口方法里严格校验参数类型和内容,别偷懒直接eval。另外加上@JavascriptInterface注解,确保只在JS里调用。代码如下:

public class JsBridge {
@JavascriptInterface
public void vibrate(String params) {
if (!params.matches("^\d+$")) return; // 只允许数字
long time = Long.parseLong(params);
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
if (vibrator != null) vibrator.vibrate(time);
}
}


顺便,设置setDomStorageEnabled(false)setAllowFileAccess(false)也能减少风险。懒得逐个检查就用WebView的X5内核替代原生实现。
点赞 9
2026-01-29 08:06