亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java中的javascript解析器

java中的javascript解析器

至尊寶的傳說 2023-08-04 17:38:43
我有一個文本框,可以接受任何文本,包括 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 標簽。任何人都可以建議一種方法來做到這一點。
查看完整描述

1 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

由于您已經使用 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 的屬性(hrefsrc等)都可以包含"javascript:"執行 JavaScript 的值。

最后,我建議不要將原始 html 存儲到數據庫中,即使它通過了您的驗證。而是將 JSoup 解析的文檔再次轉換為 html。通過這種方式,您可以確保您的文檔格式良好,不含任何“危險”元素。


查看完整回答
反對 回復 2023-08-04
  • 1 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號