当前位置 : 主页 > 网页制作 > Nodejs >

Node.js – 何时进行HTML转义到JSON数据,服务器或客户端?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我正在使用Node.js和Underscore.js.我无法确定是否在服务器端或客户端转义 JSON数据.对于下划线,不会使用语法%= someValue%自动转义内插值.但是% - someValue%,这与EJS形成鲜明对比,可能会引
我正在使用Node.js和Underscore.js.我无法确定是否在服务器端或客户端转义 JSON数据.对于下划线,不会使用语法<%= someValue%>自动转义内插值.但是<% - someValue%>,这与EJS形成鲜明对比,可能会引起混淆. GitHub上有一个 issue,还有 commit的自动逃生版本.但该问题下的评论说:

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, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;');
};
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()函数以及一堆其他函数来验证/清理你的数据.

网友评论