¿Este campo de entrada y esta función son seguros? [cerrado]

1

Simplemente estoy aprendiendo sobre la seguridad de TI, por lo que esto es algo básico y quizás lo estoy pensando demasiado.

1. Tengo este campo de entrada en mi sitio de wordpress (ssl está activado) que dirige al usuario al producto que escribió:

HTML

<a target="_blank" id="reflectedlink" href="http://www.google.com/search">Button</a> <input id="searchterm"/>

JS

// Adds string to href var link= document.getElementById('reflectedlink'); var input= document.getElementById('searchterm'); input.onchange=input.onkeyup= function() { link.search= '?q='+encodeURIComponent(input.value); }; // Fires button on enter keypress $("#searchterm").on("keyup", function(e) { if(e.keyCode == 13) { $('#reflectedlink')[0].click(); } });

Filtra los signos defectuosos con encodeURIComponent () (¿debería estar bien si js está activado?), sin embargo, si alguien apaga js, ¿puede el campo de entrada ser ¿Utilizado para cualquier tipo de ataque XSS o similar? ¿Debo validar este campo en mi functions.php o está bien ya que no se están enviando datos a la base de datos y Wordpress puede estar cuidando de todos modos?

2. Aprendí que debería evitarse innerHTML, por lo que tengo esta función para ordenar productos, utiliza el método jQuerys html () (que básicamente hace lo mismo):

HTML

<div class="wrap"> <button id="alphBnt">Alphabetical</button> <button id="numBnt">Numerical</button> <div id="container"> <div class="box"> <h1>B<h1> <h2>10.35</h2> </div> <div class="box"> <h1>A<h1> <h2>100.05</h2> </div> <div class="box"> <h1>D<h1> <h2>200</h2> </div> <div class="box"> <h1>C<h1> <h2>5,510.25</h2> </div> </div> </div>

JS

var $divs = $("div.box"); $('#alphBnt').on('click', function () { var alphabeticallyOrderedDivs = $divs.sort(function (a, b) { return $(a).find("h1").text() > $(b).find("h1").text(); }); $("#container").html(alphabeticallyOrderedDivs); }); $('#numBnt').on('click', function () { var numericallyOrderedDivs = $divs.sort(function (a, b) { return $(a).find("h2").text() > $(b).find("h2").text(); }); $("#container").html(numericallyOrderedDivs); });

¿Está bien usarlo en este contexto? ¿Esto hace referencia a "evitar innerHTML / html ()" en su uso en combinación con campos de entrada / cualquier entrada de usuario?

PARA LA CLARIFICACIÓN

Con respecto al campo de entrada que pregunto sobre este escenario exacto, no se utiliza para almacenar ningún dato en el servidor, todo lo que hace es cambiar un href y estoy validando la entrada a este campo con encodeURIComponent ().

Quería saber si lo siguiente es correcto:

Si el js del cliente está activado, la entrada se valida, si no, no tengo que validar la entrada ya que este campo de entrada es básicamente eso, un campo de entrada sin interacción con el servidor o el cliente (aparte de escribir dígitos en ella) y, por lo tanto, no se pueden usar para un ataque (suponiendo que el resto del sitio / servidor sea seguro).

Gracias de antemano por cualquier ayuda / sugerencias.

    
pregunta Fixingthings 19.08.2017 - 00:50
fuente

1 respuesta

2
  1. " si alguien desactiva js, ¿se puede usar el campo de entrada para cualquier tipo de ataque XSS "? no, necesita que JS saque el XSS, pero aún se necesita un servidor para detener otros ataques como SQLI, enlaces / descargas de malware y phishing CSS.

  2. $(elm).html(str) es más peligroso que elm.innerHTML=str porque carga scripts externos y eval() s cualquier contenido en etiquetas de script en línea, mientras que innerHTML no ejecuta etiquetas de script. Sin embargo, ambos son susceptibles a ataques basados en atributos como onmouseover=alert(666) , así que desinfecte todo el contenido enviado por el usuario en un servidor antes de servir a otros usuarios.

EDITAR: Debo mencionar que puede usar elm.innerText=str de manera segura en entradas arbitrarias, y conserva algunos formatos especiales y caracteres deseados por el ser humano, sin ningún riesgo de XSS. $(elm).text(str) hace lo mismo, por lo que también es seguro.

    
respondido por el dandavis 20.08.2017 - 12:59
fuente

Lea otras preguntas en las etiquetas