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.