java中的javascript解析器

用户11935734

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

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

当我从服务器端 API 上的上述文本框接收文本时,如果嵌入了 java 脚本的 html 文本存在,但正常的 html 文本应该可以,它应该会抛出错误。

示例:在上面的文本框中,<svg onload=alert(document.cookie)/>不允许使用data as ,但允许使用普通的 html text like <html><h1>this is test</h1></html>

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

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

巴莱纳托

由于您已经在使用 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*属性(onloadonclick等)。你在这里有完整的列表但它可能足以获取所有属性,e.attributes​()如果其中任何一个以"on".
  • 每个接受 URL(hrefsrc等)的属性都可以包含一个"javascript:"执行 JavaScript值。你也应该检查所有这些。有关这些属性的完整 (?) 列表,请查看其他 SO 问题

最后,我建议不要将原始 html 存储到数据库中,即使它通过了您的验证。而是将 JSoup 解析的文档再次转换为 html。通过这种方式,您可以确保您拥有一个格式良好的文档,没有任何“危险”元素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

解析器中的Java异常处理

来自分类Dev

java html解析器,用于读取javascript生成的内容

来自分类Dev

java html解析器,用于读取javascript生成的内容

来自分类Dev

Java中的XML JDOM解析器中的OutOfMemoryError

来自分类Dev

如何在 JavaScript 中调试 GraphQL 解析器?

来自分类Dev

Java API中的条件字符串解析器?

来自分类Dev

在Java中读取xml文件和解析器

来自分类Dev

在Java中读取xml文件和解析器

来自分类Dev

JavaScript数学函数解析器

来自分类Dev

JAVA中的Opencsv解析器,无法解析数据中的双引号

来自分类Dev

Java对象的JSONPath解析器

来自分类Dev

Java JSON简单解析器

来自分类Dev

Java Sax解析器错误

来自分类Dev

Java android JsonArray解析器

来自分类Dev

容错Java xml解析器

来自分类Dev

Java解析器时间问题

来自分类Dev

使用simle json解析器的Java中的JSON解析错误

来自分类Dev

了解Scala中的Packrat解析器

来自分类Dev

JSON解析器中的错误(NullPointerException)

来自分类Dev

在C中实现xml解析器

来自分类Dev

C#中的Sip解析器

来自分类Dev

angularjs中的通用路由解析器?

来自分类Dev

QT中的json解析器

来自分类Dev

Go中的通用XML解析器

来自分类Dev

BNF fparsec解析器中的错误

来自分类Dev

ANTLR:忽略解析器中的语句

来自分类Dev

在Haskell中合并解析器

来自分类Dev

C#中的Sip解析器

来自分类Dev

python中的解析器XML