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

时间:2015-11-08 09:27:17

标签: javascript mustache

我使用小胡子来逃避用户数据,然后通过javascript在html中显示它。

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

例如

Shaun's place

显示为

Shaun's place

我使用Mustache中的三个括号技巧,但这并不意味着数据不会被转义,因此会使页面容易受到攻击吗?

  • 存储在MySQL中的数据是用户个人资料。

  • 当我从服务器上取回它时,我通过以下胡须代码运行数据,然后将其保存在本地对象中 - 这个想法是我不必继续通过多个批次运行它每当我不在网站的不同地方展示它时,小胡子。所以这里是其中一个键,位置,正在处理的例子:

    var t =" {{x}}",o = {x:serverObjectReturn.location},x = Mustache.render(t,o); localUserDataObject.location = X;

  • 并非100%确定内容类型的含义 - 我使用AJAX调用,并将数据作为JSON发回。 AJAX函数dataType是" json"。如果您需要其他内容并且我已编辑

  • ,请与我们联系
  • 我更新了表单输入字段,以便加载其配置文件数据,以便进行编辑,如下所示:

    $("#位置&#34)VAL(userData.location);

我得到的时候:

Shaun's place

...而:

$("#testerDivLocation&#34)的HTML(userData.location);

显示

Shaun's place

谢谢。

1 个答案:

答案 0 :(得分:1)

以下是有关该主题的文档:

  

默认情况下,所有变量都是HTML转义的。如果你想回来   未转义的HTML,请使用三重胡须:{{{name}}}。

所以你是对的,它可能会让你面临漏洞(尤其是XSS)。这对于您已经知道可以安全地在HTML中呈现的数据非常有用,可能是因为您已经在其他地方对其进行了转义和/或清理。

由于input字段值略有不同,因为它们比普通HTML更原始,您可能需要在服务器端执行一些自定义转义,或者在{{1}之前的javascript中执行一些自定义转义打电话。这意味着找出使输入字段处于危险之中的所有可能字符的集合(引用很明显,但是尖括号render<怎么样?)

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

>

(假设为var t="<input type='text' name='firstname' value=''>"; var x=Mustache.render(t); $('input', x).val(serverObjectReturn.firstname); 调用加载了jQuery。)