tag - script type= text/javascript src=
Evitar inyecciones de HTML y Script en Javascript (5)
Aquí hay un pequeño script, usando jQuery, que elimina todo el html y guarda solo el texto:
function( html ) {
return $( $.parseHTML(html) ).text();
}
Esto se puede hacer en javascript puro (es6) si la inclusión de jQuery es un problema:
function textFromHtmlString( arbitraryHtmlString ) {
const temp = document.createElement(''div'');
temp.innerHTML = arbitraryHtmlString;
return temp.innerText;
}
Supongamos que tengo una página con un cuadro de entrada. El usuario escribe algo en el cuadro de entrada y pulsa un botón. El botón desencadena una función que recoge el valor escrito en el cuadro de texto y lo emite en la página debajo del cuadro de texto por cualquier razón.
Ahora esto ha sido inquietantemente difícil de encontrar una respuesta definitiva o no me preguntaría, pero ¿cómo harías para producir esta cadena?
<script>alert("hello")</script> <h1> Hello World </h1>
¿Para que no se ejecute el script ni se muestre el elemento HTML?
Lo que realmente estoy preguntando aquí es si existe un método estándar para evitar la inyección de HTML y Script en Javascript . Todo el mundo parece tener una forma diferente de hacerlo (estoy usando jQuery, así que sé que simplemente puedo enviar la cadena al elemento de texto en lugar del elemento html , por ejemplo, ese no es el punto).
Pruebe este método para convertir una ''cadena que potencialmente podría contener código html'' a ''formato de texto'':
$msg = "<div></div>";
$safe_msg = htmlspecialchars($msg, ENT_QUOTES);
echo $safe_msg;
¡Espero que esto ayude!
Puede codificar el <
y >
en su equivalente de HTML.
html = html.replace(/</g, "<").replace(/>/g, ">");
Un trazador de líneas:
var encodedMsg = $(''<div />'').text(message).html();
Verlo funcionar:
Utilizar esta,
function restrict(elem){
var tf = _(elem);
var rx = new RegExp;
if(elem == "email"){
rx = /[ ''"]/gi;
}else if(elem == "search" || elem == "comment"){
rx = /[^a-z 0-9.,?]/gi;
}else{
rx = /[^a-z0-9]/gi;
}
tf.value = tf.value.replace(rx , "" );
}
En el back-end, para java, pruebe usar la clase StringUtils o un script personalizado.
public static String HTMLEncode(String aTagFragment) {
final StringBuffer result = new StringBuffer();
final StringCharacterIterator iterator = new
StringCharacterIterator(aTagFragment);
char character = iterator.current();
while (character != StringCharacterIterator.DONE )
{
if (character == ''<'')
result.append("<");
else if (character == ''>'')
result.append(">");
else if (character == ''/"'')
result.append(""");
else if (character == ''/''')
result.append("'");
else if (character == ''//')
result.append("\");
else if (character == ''&'')
result.append("&");
else {
//the char is not a special one
//add it to the result as is
result.append(character);
}
character = iterator.next();
}
return result.toString();
}