Tengo una aplicación web para chatear y cuando alguien enviaba algo, enviaba el mensaje a todos agregando ese texto al elemento de la sección de chat, pero si ingresaban un código allí, generaría el código y lo ejecutaría, lo cual es un problema como eso es peligroso y quiero arreglarlo, pero no estoy seguro de cómo hacerlo.
socket.on('message', function (data) { $('.chat').append('<p><strong style=color:'+data.color+'> ' + data.user + '</strong> <span style=color:"black">' + data.message + '</span></p>'); });
<div id="maindiv1"> <section id="chatSection" class="chat"></section> </div>
Entonces si pongo:
<h1> hello </h1>
Haría ese elemento para todos los usuarios en el chat o como location.assign("https://google.com")
lo haría ir a google para todos los usuarios que no quiero que envíe lo que sea como texto, no código, pero aún puede tener la funcionalidad de agregar cosas como
<p><strong style=color:'+data.color+'> ' + data.user + '</strong> <span style=color:"black">' + data.message + '</span></p>
... solo cuando se envía y no el mensaje que es data.message
.
Solo codifica el mensaje de texto antes. Prueba esto:
socket.on('message', function (data) { var securedText = $('<div/>').text(data.message).html(); $('.chat').append('<p><strong style=color:'+data.color+'> ' + data.user + '</strong> <span style=color:"black">' + securedText + '</span></p>'); });