Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js-何时将HTML转义到JSON数据,服务器端还是客户端?_Json_Client Side_Server Side_Underscore.js_Html Escape - Fatal编程技术网

Node.js-何时将HTML转义到JSON数据,服务器端还是客户端?

Node.js-何时将HTML转义到JSON数据,服务器端还是客户端?,json,client-side,server-side,underscore.js,html-escape,Json,Client Side,Server Side,Underscore.js,Html Escape,我使用的是Node.js和下划线.js。我无法确定是在服务器端还是客户端转义JSON数据。因为下划线不会使用语法自动转义插值,而是使用自动转义插值,这与EJS相反,可能会导致混淆。GitHub上有一个版本,还有一个自动转义版本。但该问题背后的一条评论说: 我的一般哲学观点是,逃跑应该在更靠近目标的地方进行 您的数据比模板语言中的数据多 那么,有没有建议什么时候将HTML转义到AJAX数据更好?以下是我一直在使用的服务器端帮助器函数: var htmlEscape = function(html)

我使用的是Node.js和下划线.js。我无法确定是在服务器端还是客户端转义JSON数据。因为下划线不会使用语法
自动转义插值,而是使用
自动转义插值,这与EJS相反,可能会导致混淆。GitHub上有一个版本,还有一个自动转义版本。但该问题背后的一条评论说:

我的一般哲学观点是,逃跑应该在更靠近目标的地方进行 您的数据比模板语言中的数据多

那么,有没有建议什么时候将HTML转义到AJAX数据更好?以下是我一直在使用的服务器端帮助器函数:

var htmlEscape = function(html){
    return String(html)
    .replace(/&(?!\w+;)/g, '&')
    .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;
};

在服务器上执行清理/转义操作总是更好的,因为任何人都可以随意处理客户端代码并发送数据


有一个很棒的node.js模块,它有一个xss()函数以及一系列其他函数来验证/清理数据。

只需注意,xss Sanitarizer在node validator的版本3中被弃用了库的版本3中弃用了一些功能xss Sanitarizer:原因如下。改用谷歌Caja。仅添加此评论以供将来参考,完全同意答案
res.json(xss(someData));