有没有理由逃避HTML中的整数?

时间:2014-08-05 21:37:28

标签: javascript html ajax escaping underscore.js-templating

如果我通过Ajax从服务器获取以下对象:

$.get('/product/10', function (response) {
  product = response;
    // product:
    // {
    //   name: "Product X",
    //   stock: 20
    // }
});

然后使用Underscore.js模板将其输出到HTML:

<input type="number" value="<%- product.name %>">
<input type="number" value="<%= product.stock %>">

如果我知道它总是来自服务器的整数,是否还有理由转义stock属性?

我想不出一种利用它的方法,所以我想知道“逃避所有事情”是一个好政策,还是“只逃避你需要的东西”是一个更好的政策。

4 个答案:

答案 0 :(得分:1)

你显然不需要逃避整数。一般来说逃避一切并打印你想要的原始版本可能是一个好习惯。但是你也可以说你应该相信来自服务器的东西 - 而不是来自客户端的东西。最后,它只是你想养成的习惯。我个人认为不会逃避它(因为它不需要逃脱)所以我不会逃避它。

答案 1 :(得分:1)

如果你想完全放在安全的一边,逃避一切。代码可能会更改,您可能决定使用之前使用过数字的字符串。如果你逃避一切,你就不会有问题。

然而,这只是谨慎。如果你可以保证它总是一个数字,即使在AJAX请求失败时,在所有边缘情况下,也可以不逃避它。请注意,无论我在哪里工作,共识都是安全的。

答案 2 :(得分:1)

JavaScript是动态类型的,因此在到达模板时,无法确保product.stock确实是一个数字。将来使用模板编写的任何代码(可能由其他人编写)都可以传递product的任何值,因此stock可以是任何类型。

最好总是逃避,除非在极少数情况下,您希望该值实际上是HTML,在这种情况下您无法转义,因此将来对代码的更改不太可能破坏模板。

答案 3 :(得分:0)

如果输入的类型为number,那么您可以保证在该输入中输入数字或不输入任何内容。

作为测试,请尝试将字符串drop database添加到类型为number的输入中。 扰流警报:输入将保持为空。

类型text的输入可能更危险。