所以有点难以解释,但我会尝试:的Node.js/JavaScript的 - 避免用户进入脚本和HTML实体
function sentMessage(){
if($('#messageInput').val() != "")
{
socket.emit('message', $('#messageInput').val());
addMessage($('#messageInput').val(), "Me", new Date().toISOString(),
true);
$('#messageInput').val('');
}
}
所以这个:对Node.js的 客户端运行 基本上我有聊天应用做两件事:
它发送消息到服务器说有新消息,同时它将消息添加到chatwindow(客户端)。
服务器端:
socket.on('message', function (message) {
socket.broadcast.emit('message', {
'message' : entities.encode(message),
'pseudo' : socket['final_user']
});
db.query('INSERT INTO messages (user_id, message) VALUES (\
"'+socket['final_user']+'", "'+db.escape(message)+'")');
});
所以服务器检测到新的消息,并广播给所有用户说有新的消息,在这里它与人姓名。它也将其插入到数据库中。所以我的问题是:如果用户输入类似的东西或警报(“你好”);
它WORKS罚款为其他用户,它不会出现,并显示为明码,而不会造成混乱,但谁进入它的用户 - 它打印的图像和警告框。
此外每当用户以后登录时,老消息使用此函数加载:
function loadMessages(msg, pseudo, time){
$("#chatEntries").append('<div class="messagesOLD">' +
"<span class='msg_date'>"+dateFormat(time)+"</span><span class='msg_seperator'> | </span><span class='msg_name'>"+ pseudo + '</span> : ' + msg + '</div>');
}
它还打印警报和图像用户。 我知道很多人可能会说,像我在服务器端使用entities.encode(),但由于某种原因,它不适用于客户端。
好吧我设法修复加载以前的消息和加载脚本给用户,因为他们从服务器端加载,所以我能够使用entities.encode(),所以现在脚本和所有可能的漏洞显示为普通的代码和没有执行。
但是,键入它的用户仍然可以执行脚本。
function addMessage(msg, pseudo){
var post_date = new Date();
var timesp = post_date;
if(pseudo == "Me"){
$("#chatEntries").append('<div class="message msg_owner">' +
"<span class='msg_date'>"+dateFormat(timesp)+"</span><span class='msg_seperator'> | </span><span class='msg_name'>"+ pseudo + '</span> : ' + msg + '</div>');
}
else{
$("#chatEntries").append('<div class="message">' +
"<span class='msg_date'>"+dateFormat(timesp)+"</span><span class='msg_seperator'> | </span><span class='msg_name'>"+ pseudo + '</span> : ' + msg + '</div>');
}
$('#chatEntries').scrollTop(1E10);
}
听起来就像是完全客户端的东西。 'addMessage'函数的内容是什么 - 这可能是错误所在的地方 – 2014-10-31 14:12:06
为什么不在'loadMessages'函数中使用'entities.encode()'? – Pointy 2014-10-31 14:13:15
它看起来像只在实体到达服务器时进行编码 - 所以当添加到本地时,它不会被编码。您可能需要查看您需要编码的点。就个人而言,我可能只是在它显示在屏幕上之前这样做,并在传输/数据存储过程中保持键入 – 2014-10-31 14:13:17