java中的javascript解析器

我有一个文本框,可以接受任何文本,包括 html 和嵌入 javascript 的 html。

我需要通过在 java 中实现的服务器端 REST API 来验证此数据。基本上我需要通过不允许任何 javascript 数据保存在我的数据库中来进行此验证以避免 XSS 漏洞。

当我从服务器端 API 上的上述文本框中接收文本时,如果存在嵌入 java 脚本的 html 文本,则应该抛出错误,但正常的 html 文本应该没问题。

示例:在上面的文本框中,<svg onload=alert(document.cookie)/>不允许使用 as 数据,但 <html><h1>this is test</h1></html>允许使用正常的 html 文本。

我尝试使用 JSoup,它是一个 HTML 解析库,但我只需要验证该文本中是否存在 javascript,而不是检查 html 标签。

任何人都可以建议一种方法来做到这一点。


至尊宝的传说
浏览 71回答 1
1回答

狐的传说

由于您已经使用 JSoup 解析 HTML,因此下一步是遍历每个元素以检查它们是否包含 Javascript。像这样的代码将检查每个元素:boolean validateHtml(String html) {  Document doc = Jsoup.parse(html);  for(Element e : doc.getAllElements()) {      if(detectJavascript(e)) {          return false;      }  }  return true;}private boolean detectJavascript(Element e) {  if(/* Check if element contains javascript */) {      return true;  }  return false;}detectJavacript然后,您应该在函数内部执行几项检查:当然,拒绝script元素:e.normalName() == "script"on*拒绝在任何属性(onload、onclick等)中具有值的元素。每个接受 URL 的属性(href、src等)都可以包含"javascript:"执行 JavaScript 的值。最后,我建议不要将原始 html 存储到数据库中,即使它通过了您的验证。而是将 JSoup 解析的文档再次转换为 html。通过这种方式,您可以确保您的文档格式良好,不含任何“危险”元素。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java