在实时聊天中实现链接

所以我正在与socket.io和node.js进行实时聊天,我有聊天和一切工作,但如果有人在聊天中链接一个网站,我希望它自动成为一个超链接。

我正在使用autolinker.js来做到这一点,它正在使链接,我想要的,但我的问题是我输出消息,以避免HTML注入的方式。

for(var x = data.length - 1; x >= 0; x--) { var autolinker = new Autolinker(); var linkedText = autolinker.link(data[x].message); var message = document.createElement('div'); var linkOfMessage; message.setAttribute('class', 'chat-message'); //message.textContent = data[x].name + ': '; message.innerHTML = data[x].name + ': ' + linkedText; // Append messages.insertBefore(message, messages.firstChild); messages.appendChild(message); messages.scrollTop = messages.scrollHeight; } 

所以消息得到了正确的处理,但是使用innerHTML,他们基本上可以在聊天中使用脚本,这是不好的。 但

 message.textContent = data[x].name + ': ' + linkedText; 

只是以纯文本显示我的超链接,而不是可点击的,有没有这样做,而没有设置网站的风险?

我已经花了几个小时环顾四周,无法掩盖与此有关的任何事情。

提前致谢!

您应该始终清理用户input。 你需要链接,所以你必须在消息中允许一些html标签,但是你想过滤掉大部分的HTML标签(有些是危险的,比如脚本,有些可能会“损害”你的聊天视觉效果)。 尝试使用如

https://www.npmjs.com/package/sanitize-html

推出自己的消毒剂并不是一个好主意。 像这样的软件包允许指定要允许哪些标签,删除哪些标签以及具有其他各种有用的选项。