我想使用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)
}
答案 0 :(得分:2)
你提到的任何一件事都不会给你带来安全感。 要处理危险的用户输入,您需要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');
}