簡體   English   中英

在Express / Jade中插值JSON的正確方法?

[英]Proper way to interpolate JSON in Express/Jade?

在較舊的框架(Django,Rails)中,這似乎是一個已解決的問題,但我終生無法在Express中找到解決方案。

一頁web應用程序中的一種超常見模式是使用模板數據創建html,然后將與JSON相同的數據回顯給客戶端,以便它可以維護狀態。

each comment as comments
  div= comment

script.
  var comments = !{JSON.stringify(comments)}

顯然,這是不安全的,因為用戶可以輕松創建注釋來關閉script標簽並執行各種修飾。 那么解決這個問題的正確方法是什么?

我見過有人聲稱您可以通過

JSON.stringify(comments).replace(/<\//g, '<\/')

但這似乎很幼稚,尤其是在與大型健忘的團隊合作時。

類似地,我編寫了一個函數,該函數在字符串化之前html進行遞歸轉義,但是在每個字符串中用&quot;替換"似乎過分,不利於數據綁定。

編輯

供參考,這是Django的解決方案https://docs.djangoproject.com/en/dev/ref/templates/builtins/#escapejs

如果我正確理解您的意思,您是在問如何清理用戶輸入內容,以防止內容注入攻擊,XSS等。

對於這類事情,至少可以使用三個現有的Express中間件軟件包。 express-validator具有一些清理功能。 依次使用node-validator 當前版本的node-validator不執行XSS清理,因此請參閱下面的express-sanitizer

備受推崇的helmet中間件具有一些XSS保護功能,可以滿足您的部分或全部需求。 如果您正在編寫Express應用程序並且完全關心安全性,那么如果您還不了解它,那么絕對應該簽出helmet

有一個稱為Express express-sanitizer的Express中間件模塊。 它似乎是最新的,只有一個貢獻者,所以請檢查代碼以查看它是否滿足您的需求並且看起來很成熟。 但是,由於node-validator不再這樣做,它正在嘗試進行XSS清理。 (請參閱上面的express-validator 。)

暫無
暫無

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

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