2017-05-05 114 views
1

考慮應用:HTML輸入轉義 - 正確的方法是什麼?

JS框架前端(例如AngularJS)和 REST API後端(例如傑克遜+彈簧安置)和一些HTML郵件模板。

從XSS全局保證整個系統的正確方法是什麼?

第一件事是通過從輸入字段中暴露HTML實體來保護前端的Web組件。

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

想象一下包含Twitter風格標籤的帖子/評論字段 - #tag會自動轉換爲指向someurl/tags/tag的超鏈接,這將通過在呈現時創建HTML標籤來構建,然後,最終div會被附加到網站上。這種div的其他用途是將其嵌入到HTML郵件模板中,該郵件模板將通過SMTP發送給其他用戶。

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

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

確保這類字段的正確方法是什麼?是否應該在全球範圍內使用Jackson過濾器/轉換器/助手,將字段值發佈到後端?還是應該每次都逃脫,當暴露在前臺或郵件模板中的每個地方?

回答

2

你應該:

  • ,當他們被渲染逃脫前端的值。這應該使用全局實用程序或設置來完成。一些前端框架默認是這樣做的(例如React)。
  • 在提交到後端時驗證值並在適當的位置阻止字符。例如。名稱字段可能不需要<>

你可以考慮:

  • 提供返回溢出值,如果有此要求的端點(即&escapeHtml=true)。我個人不是這方面的粉絲,但也許它適合你的情況。

我不建議:

  • 在後端存儲之前逃離的所有數據。也許這是個人偏好,但爲HTML呈現轉義數據假設數據只會用於此類(例如,如果有人直接調用API將數據轉換爲CSV或其他格式的html,則會發生什麼情況請勿應用)。
相關問題