我正在从各种意图加载 URL(我有深层链接或 FCM 通知发送的链接),然后在 WebView 中打开它们。
我实现了 Jsoup 来保护我的应用程序免受 XSS 攻击。
实施:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String intentUrl = loadIntentUrl(intent);
if (intentUrl != null) {
String safeUrl = Jsoup.clean(intentUrl, Safelist.basic());
Log.d("onNewIntent", "safeUrl: " + safeUrl);
webView.loadUrl(safeUrl);
}
}
但我收到了有效的深层链接 URL(示例:https://my.appName.com/?activate=users&userId=523332)
但是
Jsoup.clean(intentUrl, Safelist.basic())
正在将其转变为
https://my.appName.com/?activate=users&userId=523332
将其发送到 webView 会给客户带来一些问题。有没有办法消除这种转换,以便 Jsoup 正确处理它,同时防止 XSS 攻击?
我可以使用
.replaceAll("&", "&")
但不确定这是否是一个很好的动态解决方案(如果 Jsoup 可能会在不同链接中导致某些其他参数错误)
jsoup.clean
方法接受并返回 HTML。根据文档:
公共静态字符串clean(字符串bodyHtml,安全列表safelist)
通过解析输入 HTML,从不受信任的输入 HTML 中获取安全的 HTML 通过允许的标签和属性的安全列表对其进行过滤。
clean 方法不会获取和清理 URL 的内容。如果你想这样做(?),你需要做类似的事情:
String url = "https://my.appName.com/?activate=users&userId=523332";
Document doc = Jsoup.connect(url).get();
String sourceHtml = doc.html();
String cleanHtml = Jsoup.clean(sourceHtml, url, Safelist.basic());
print(cleanHtml); // Implement to send the cleaned HTML to your webview