gpt4 book ai didi

java中的javascript解析器

转载 作者:行者123 更新时间:2023-12-02 09:30:57 27 4
gpt4 key购买 nike

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

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

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

示例:在上面的文本框中,数据为<svg onload=alert(document.cookie)/>不应该允许,但正常的 html 文本如 <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 等)中包含值的元素。您有完整的列表here但这可能足以使用 e.attributes() 获取所有属性,并拒绝其中任何一个以 "on" 开头的属性。
  • 每个接受 URL 的属性(hrefsrc 等)都可以包含执行 JavaScript 的 "javascript:" 值。您也应该检查所有这些。有关这些属性的完整(?)列表,请查看 this other SO question .

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

关于java中的javascript解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57990495/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com