我正在使用Node.js和Underscore.js.我无法确定是否在服务器端或客户端转义 JSON数据.对于下划线,不会使用语法%= someValue%自动转义内插值.但是% - someValue%,这与EJS形成鲜明对比,可能会引
I’m of the general philosophy that escaping should be done closer to
your data than in the templating language
那么,有什么建议说什么时候做HTML转义到AJAX数据更好?这是我一直使用的服务器端辅助函数:
var htmlEscape = function(html){ return String(html) .replace(/&(?!\w+;)/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/"/g, '"'); }; var xss = function(obj) { if (obj instanceof Array) { for (var i = 0; i < obj.length; i++) { obj[i] = xss(obj[i]); } } else { for(var key in obj) { // key != '_id' for mongoose doc if(obj[key] instanceof Object && !(obj[key] instanceof String) && !(obj[key] instanceof Function) && key != '_id') { obj[key] = xss(obj[key]); } else if (obj[key] instanceof String || typeof(obj[key]) == "string") { obj[key] = htmlEscape(obj[key]); } else { obj[key] = obj[key]; } } } return obj; };
每当返回JSON时调用它:
res.json(xss(someData));在服务器上执行清理/转义操作总是更好,因为任何人都可以弄乱客户端代码并以他们想要的任何方式发送数据.
有一个很棒的node.js模块,node-validator,它有一个xss()函数以及一堆其他函数来验证/清理你的数据.