[英]Chat application string escaping
我注意到有可能XSS我的聊天应用程序。 关于如何防止这种情况的任何建议?
我试过了:
text = escape(text);
和
text = encodeURIComponent(text);
但是,一切看起来都怪异而笨拙。 我想如果我写
<b>test</b>
它会打印出确切的字符串,而不是粗体字。 谢谢。
<div class="chat-room"></div>
b.innerHTML = '<a target="_blank" href="http://steamcommunity.com/profiles/'+steamid+'"><img src="'+avatar+'" class="avatarka"></a><div class="msg_block"><span style="cursor:pointer" class="from">'+name+'</span>: <br><span style="font-size:14px;" class="msg">'+text+'</span></div>';
$('.chat-room').append(b);
$('.chat-room').scrollTop(100000);
这实在太麻烦了,如果您需要更多信息,请询问,我将尽一切可能提供。 谢谢。
如果要将text
视为文本而不是HTML,最可靠的方法是将其放在文本节点中:
b.innerHTML = '<a target="_blank" href="http://steamcommunity.com/profiles/'+steamid+'"><img src="'+avatar+'" class="avatarka"></a><div class="msg_block"><span style="cursor:pointer" class="from">'+name+'</span>: <br><span style="font-size:14px;" class="msg"></span></div>';
b.querySelector(".msg").appendChild(document.createTextNode(text));
$('.chat-room').append(b);
$('.chat-room').scrollTop(100000);
请注意,如果name
也是从用户输入派生的,并且尚未进行过消毒,则可能要对name
进行相同的处理。
我不确定为什么要混合使用innerHTML
和jQuery,但这是实现这一目标的一种方法。 更具jQuery风格的版本是:
$(b).empty().append(
$('<a target="_blank" href="http://steamcommunity.com/profiles/'+steamid+'"><img src="'+avatar+'" class="avatarka"></a><div class="msg_block"><span style="cursor:pointer" class="from">'+name+'</span>: <br><span style="font-size:14px;" class="msg"></span></div>')
.find(".msg").text(text)
.end()
);
$('.chat-room')
.append(b)
.scrollTop(100000);
另一种方法是简单的文本处理:将&
转换为&
和<
至<
:
text = text.replace(/&/g, "&").replace(/</g, "<");
但是在可能的情况下,我倾向于使用文本节点(直接如上所述,或通过jQuery的text
方法),而不是replace
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.