节点js。我想使用markdown安全地保存数据(对于xss)而不是json.stringify()方法

时间:2018-02-07 13:59:23

标签: javascript json node.js markdown

我想使用markdown来安全地保存数据而不是json.stringfy()方法。就像这个例子:usercomment是<script>alert('ss')</script>

app.get('/comment',function(req.res){
var usercomment=req.body.comment;//from comment textarea(user's comment)
const x=markdown.toHTML(usercomment);
var comments=new comment({user:req.session.nick,comment:x});
comments.save();
console.log(x)

}

或者像这样使用json.stringify()我使用json.stringify()保存usercomment。稍后我将使用markdown.toHTML(评论)将评论(从数据库)发送到html:

app.get('/comment',function(req.res){
var usercomment=req.body.comment;
    const x=JSON.stringify(usercomment);
    var comments=new comment({user:req.session.nick,comment:x});
    comments.save();
    console.log(x)

    }
我应该使用哪一个?

1 个答案:

答案 0 :(得分:2)

JSON和Markdown不会为您提供安全性

你提到的任何一件事都不会给你带来安全感。 要处理危险的用户输入,您需要sanitize输入。

快速搜索NPM会给我sanitize-html,这似乎对此有用。

const sanitizeHtml = require('sanitize-html');
app.post('/comment', function(req, res){
    let usercomment = req.body.comment;
    let safe_comment = sanitizeHtml(usercomment);
    let comments = new comment({
        user: req.session.nick,
        comment:safe_comment,
    });
    comments.save();
    res.send('saved');
}

如果您不希望允许用户使用任何HTML,则可以转义用户注释,以使其输入不像HTML一样。 (htmlencode似乎对此有用)

const htmlencode = require('htmlencode');
app.post('/comment', function(req, res){
    let usercomment = req.body.comment;
    let safe_comment = htmlencode.htmlEncode(usercomment);
    let comments = new comment({
        user: req.session.nick,
        comment:safe_comment,
    });
    comments.save();
    res.send('saved');
}
相关问题