0

因此,我的团队进行了一场小型辩论,我确信这在很多地方都得到了回答,但我找不到任何明确的答案。

现在我们有一个服务器可以处理 JSON 数据(想想 REST,排序)。客户端是一个完整的 JavaScript 客户端,它使用 $.ajax 来获取数据并适当地呈现它。

客户端使用UnderscoreJS 模板在 HTML 中呈现数据:

<%- something %>

因此,如果服务器发送一个 JSON 块(非 html 编码):

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

服务器应该是 HTML 还是 JavaScript 编码这个值?还是应该留给客户?

如果来自服务器的一些数据需要成为元素的属性怎么办:

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

我意识到我不需要对服务器生成的任何内容进行编码,它是用户输入的所有数据。所以想象上面的“userId”是由用户设置的,而不是生成的。

因此,如果我们在服务器和客户端上进行编码,我们会在呈现的页面上看到:

Joe's Crab &amp; Cookies
4

2 回答 2

0

如果您要在某处发送 json 数据,则应该对其进行的唯一编码是 json 编码。您不一定知道这些值是否会以 sql、javascript、xml、html 属性、winforms 应用程序等形式结束。

现在,另一方面,如果您的某些 json 值包含 html,则该 html 值应该被编码,准备显示 html。这取决于上下文。

于 2013-08-21T19:55:15.627 回答
0

首先,如果可以由用户设置,您应该转义该值。您应该尽可能多地使用转义和验证——无论是在输入字段上、在服务器上捕获数据时、输入到 DB 时,还是在最后渲染它时。

不转义数据的轻微后果之一是,当您输出到data-item-id.

于 2013-08-22T06:53:04.533 回答