簡體   English   中英

HTML輸入轉義 - 什么是正確的方法?

[英]HTML input escaping - what's the proper way?

考慮申請:

JS Framework Frontend(例如AngularJS)和REST API Backend(例如Jackson + Spring REST)和一些HTML郵件模板。

什么是從XSS全球保護整個系統的正確方法?

首先要保護前端的Web組件免於從輸入字段中公開HTML實體。

第二件事是阻止后端服務創建HTML模板(例如HTML郵件),其中包含來自用戶字段的惡意值。

想象一下像post / comment這樣包含Twitter樣式標簽的字段 - #tag會自動轉換為指向someurl / tags / tag的超鏈接,這將通過在渲染時創建HTML標簽來構建,然后,最終的div將被附加到網站。 這種div的其他用途是將其嵌入HTML郵件模板中,該模板將通過SMTP發送給其他用戶。

應用程序中會有各種各樣的領域。

我不想禁止用戶通過正則表達式或后端驗證從這些字段中輸入非字母數字字符。 但是,此輸入將以默認允許XSS攻擊的方式公開。

什么是確保這種領域的正確方法? 在將字段值發布到后端時,是否應該使用Jackson過濾器/轉換器/ escaper在全球范圍內完成? 或者它應該是每次轉義,當暴露到前端或郵件模板中的每個地方時?

你應該:

  • 渲染時,轉義前端的值。 這應該使用全局實用程序或設置來完成。 一些前端框架默認執行此操作(例如React)。
  • 在提交到后端時驗證值並在適當時阻止字符。 例如,名稱字段可能不需要<>

你可以考慮:

  • 如果需要,提供返回轉義值的端點(即&escapeHtml=true )。 我個人並不喜歡這個,但也許它適合你的情況。

我不建議:

  • 在存儲在后端之前轉義所有數據。 也許這是個人偏好,但是轉移html渲染的數據假設數據只會用於此類(例如,如果有人直接調用API將數據放入CSV或其他格式的html轉義,會發生什么情況請勿應用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM