聊天应用程序字符串转义
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
执行相同的操作,如果这也是从用户输入派生的,并且您尚未对其进行清理。
我不确定为什么你会混合使用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
。
相关文章:
- 使用Jinja2的JavaScript转义字符串
- 如何转义字符串中的html实体
- “转义字符串”在Regex中是什么意思?(Javascript)
- javascript中不带转义字符串的${variable}用法
- 将 FileReader.readAsBinaryString 转换为 Unicode 转义字符串
- 控制转义字符串
- json中javascript:hex的转义字符串
- 如何将ajax数据发送到rails 3.jQuery正在转义字符串
- 使用C#在BHO中注入javascript-如何正确地转义字符串
- 如何在剃刀中转义字符串
- 转义字符串化 JSON 中的单引号,作为 EJS 模板传递以供查看
- 转义字符串中的“+”加号,以便在 coffeescript/javascript 中的正则表达式中使用
- JS:转义字符串末尾带有反斜杠的字符串,用于与jQuery函数一起使用
- JavaScript 中的转义字符串
- 在将它们设置为文本区域的值之前,我必须转义字符串吗?
- 如何转义字符串以存储在 JSON 中
- 解码或转义字符串中的十六进制代码编号
- JavaScript转义字符串不会在C#正则表达式中得到取消转义.取消逃脱()
- 转义字符串
- 转义字符串 - Javascript中的输出轨字符串