如果我通过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
属性?
我想不出一种利用它的方法,所以我想知道“逃避所有事情”是一个好政策,还是“只逃避你需要的东西”是一个更好的政策。
答案 0 :(得分:1)
你显然不需要逃避整数。一般来说逃避一切并打印你想要的原始版本可能是一个好习惯。但是你也可以说你应该相信来自服务器的东西 - 而不是来自客户端的东西。最后,它只是你想养成的习惯。我个人认为不会逃避它(因为它不需要逃脱)所以我不会逃避它。
答案 1 :(得分:1)
如果你想完全放在安全的一边,逃避一切。代码可能会更改,您可能决定使用之前使用过数字的字符串。如果你逃避一切,你就不会有问题。
然而,这只是谨慎。如果你可以保证它总是一个数字,即使在AJAX请求失败时,在所有边缘情况下,也可以不逃避它。请注意,无论我在哪里工作,共识都是安全的。
答案 2 :(得分:1)
JavaScript是动态类型的,因此在到达模板时,无法确保product.stock
确实是一个数字。将来使用模板编写的任何代码(可能由其他人编写)都可以传递product
的任何值,因此stock
可以是任何类型。
最好总是逃避,除非在极少数情况下,您希望该值实际上是HTML,在这种情况下您无法转义,因此将来对代码的更改不太可能破坏模板。
答案 3 :(得分:0)
如果输入的类型为number
,那么您可以保证在该输入中输入数字或不输入任何内容。
作为测试,请尝试将字符串drop database
添加到类型为number的输入中。 扰流警报:输入将保持为空。
类型text
的输入可能更危险。