Java 嵌套 HTML 元素的 XSS 清理
Java XSS Sanitization for nested HTML elements
我在 Java 中使用 JSoup 库来清理输入以防止 XSS 攻击。它适用于像 alert('vulnerable').
这样的简单输入
示例:
String data = "<script>alert('vulnerable')</script>";
data = Jsoup.clean(data, , Whitelist.none());
data = StringEscapeUtils.unescapeHtml4(data); //StringEscapeUtils from apache-commons lib
System.out.println(data);
输出:""
但是,如果我将输入调整为以下内容,JSoup 无法清理输入。
String data = "<<b>script>alert('vulnerable');<</b>/script>";
data = Jsoup.clean(data, , Whitelist.none());
data = StringEscapeUtils.unescapeHtml4(data);
System.out.println(data);
输出:<script>alert('vulnerable');</script>
这个输出显然仍然容易受到 XSS 攻击。有没有办法完全清理输入,以便从输入中删除所有 HTML 标签?
不确定这是否是最佳解决方案,但临时解决方法是将原始文本解析为 Doc
,然后清除 Doc
元素及其所有子元素的组合文本:
String unsafe = "<<b>script>alert('vulnerable');<</b>/script>";
Document doc = Jsoup.parse(unsafe);
String safe = Jsoup.clean(doc.text(), Whitelist.none());
System.out.println(safe);
等待其他人提出最佳解决方案。
我在 Java 中使用 JSoup 库来清理输入以防止 XSS 攻击。它适用于像 alert('vulnerable').
这样的简单输入示例:
String data = "<script>alert('vulnerable')</script>";
data = Jsoup.clean(data, , Whitelist.none());
data = StringEscapeUtils.unescapeHtml4(data); //StringEscapeUtils from apache-commons lib
System.out.println(data);
输出:""
但是,如果我将输入调整为以下内容,JSoup 无法清理输入。
String data = "<<b>script>alert('vulnerable');<</b>/script>";
data = Jsoup.clean(data, , Whitelist.none());
data = StringEscapeUtils.unescapeHtml4(data);
System.out.println(data);
输出:<script>alert('vulnerable');</script>
这个输出显然仍然容易受到 XSS 攻击。有没有办法完全清理输入,以便从输入中删除所有 HTML 标签?
不确定这是否是最佳解决方案,但临时解决方法是将原始文本解析为 Doc
,然后清除 Doc
元素及其所有子元素的组合文本:
String unsafe = "<<b>script>alert('vulnerable');<</b>/script>";
Document doc = Jsoup.parse(unsafe);
String safe = Jsoup.clean(doc.text(), Whitelist.none());
System.out.println(safe);
等待其他人提出最佳解决方案。