如何在表单中安全地显示用户的服务器端数据?

How to safely display user's server side data in a form?

我在通过 javascript.

在 html 中显示之前使用 mustache 转义用户数据

但是,当我使用它在表单输入字段中显示他们的数据时(通过 AJAX 从服务器检索用户数据后预填充表单),它会显示实体。

例如

Shaun's place

显示为

Shaun's place

我会在 Mustache 中使用三括号技巧,但这是否意味着数据不会被转义,从而使页面容易受到攻击?

那时我得到:

Shaun's place

...鉴于:

$("#testerDivLocation").html(userData.location);

显示

Shaun's place

谢谢。

这是关于这个主题的文档:

All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.

所以你是对的,它可能会让你容易受到漏洞的攻击(尤其是 XSS)。这对于您已知可以安全地在 HTML 中呈现的数据很有用,也许是因为您已经逃脱了 and/or 在其他地方对其进行了清理。

由于 input 字段值略有不同,因为它们比普通 HTML 更原始,您可能需要在服务器端或 [=33] 中进行一些自定义转义=] 就在 render 调用之前。这意味着找出使输入字段处于危险之中的所有可能字符的集合(引号很明显,但是尖括号 <> 呢?)

另一种方法是将 HTML 中的表单字段值留空,并使用 JavaScript 通过 DOM 设置它们的值。这对我来说感觉更安全,因为您不再试图将原始数据嵌入 HTML 代码。

var t="<input type='text' name='firstname' value=''>";
var x=Mustache.render(t);
$('input', x).val(serverObjectReturn.firstname);

(假设为 $ 调用加载了 jQuery)。