Socket.io清理传入的数据(xss)

geo*_*per 4 javascript xss node.js express socket.io

我在expressjs中使用socket.io 3.我想用快速验证器清理传入的消息.我有这个代码:

var expressValidator = require('express-validator')
, sanitize = require('express-validator').sanitize;

socket.on('chat', function (data) {
    io.sockets.in('test').emit('chat', {
            user: sh.session.user,
            message: data.message,
            time: new Date()
    });
});
Run Code Online (Sandbox Code Playgroud)

我该怎么用sanitize(data.message).xss?因为这不起作用.

zia*_*aab 10

在这种情况下,您想要使用validator而不是express-validator.首先通过npm安装它:

npm install validator
Run Code Online (Sandbox Code Playgroud)

然后使用它几乎相同的方式:

var sanitize = require('validator').sanitize;

// later on
message = sanitize(data.message).xss()
Run Code Online (Sandbox Code Playgroud)

原因是因为express-validator当你处理通过expressjs的HTTP请求时使用.在Websockets的情况下,你不是通过expressjs,而只是听同一个端口.因此,express-validator实际上并不存在于Websocket数据事件的上下文中.