2013-08-21 69 views
0

所以我的團隊有一個小小的爭論,我相信這在很多地方都有答案,但是我找不到任何明確的答案。JSON數據,從服務器或客戶端編碼的HTML?

現在我們有一個服務器,可以拋出JSON數據(認爲REST,sorta)。客戶端是一個完整的JavaScript客戶端,它使用$ .ajax來獲取數據並進行適當的呈現。

客戶端使用UnderscoreJS templates呈現HTML內的數據:

<%- something %> 

因此,如果服務器發送向下一個JSON塊(非HTML編碼):

{ 
    "username": "Joe's Crab & Cookies" 
} 

應在服務器是HTML或JavaScript編碼這個值?還是應該留給客戶呢?

如果有什麼來自服務器的位數據的需要是元素的屬性:

<li data-item-id="<%= userId %>">something</li> 

我知道我不應該需要編碼年代由服務器產生的任何東西,它的所有數據由用戶輸入。所以想象一下,用戶設置的「userId」不是由用戶設置的。

因此,如果我們編碼服務器上,我們所呈現的頁面上看到的客戶端上:

Joe's Crab &amp; Cookies 
+0

請說明服務器應該是HTML還是JavaScript編碼這個值? –

回答

0

如果你發送的地方JSON數據,應該做它的唯一的編碼是JSON編碼。你不一定知道值是否會以sql,javascript,xml,html屬性,winforms應用程序等結束。

現在,另一方面,如果你的一些json值包含html,那個html值應該被編碼,準備好顯示html。這取決於上下文。

+0

我同意你的意見,但我不確定這是一個確定的答案。如果有人在其輸入中輸入

0

首先,如果可以由用戶設置,則應該轉義該值。 您應該使用盡可能多的轉義和驗證 - 無論是在輸入字段上,在服務器上捕獲數據時,在輸入數據庫時​​以及最後再回顯時。

不逃避數據的輕微後果是,當你輸出到data-item-id時,它會破解你的HTML。

+0

所以如果我儘可能地逃脫,我最終會在客戶端渲染出奇怪的東西:Joe's Crab & Cookie。這是因爲服務器對&符號進行了編碼,客戶端然後逃脫了服務器發送的內容(並且從字面上打印&) – Chris

相關問題