Il campo e la funzione di input sono sicuri? [chiuso]

1

Sto solo imparando a conoscere la sicurezza IT, quindi questa è roba di base e sto forse pensando troppo.

1. Ho questo campo di immissione sul mio sito wordpress (ssl è attivo) che indirizza l'utente al prodotto che ha inserito:

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 i brutti segni con encodeURIComponent () (quindi dovrebbe andare bene se js è attivo?), tuttavia, se qualcuno spegne js, il campo di input può essere usato per qualsiasi tipo di attacco XSS o roba simile? Devo convalidare questo campo nel mio functions.php o va bene dato che non ci sono dati che vengono inviati al database e wordpress potrebbe averne cura comunque?

2. Ho imparato che innerHTML dovrebbe essere evitato, quindi ho questa funzione per ordinare prodotti, utilizza il metodo jQuerys html () (che sostanzialmente è lo stesso?):

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); });

Va bene usare in questo contesto e l'intero "evita innerHTML / html ()" fa riferimento al suo uso in combinazione con i campi di input / qualsiasi input utente?

PER CHIARIMENTO

Per quanto riguarda il campo di input che sto chiedendo su questo scenario esatto, non è usato per memorizzare alcun dato sul server, tutto ciò che fa è modificare un href e sto convalidando l'input in questo campo con encodeURIComponent ().

Volevo sapere se il seguente è corretto:

Se il js del client è attivo, l'input viene convalidato, altrimenti non devo convalidare l'input poiché questo campo di input è fondamentalmente solo quello, un campo di input senza interazione con il server o il client (oltre a digitare cifre in esso) e quindi non può essere utilizzato per un attacco (supponendo che il resto del sito / server sia sicuro).

Grazie in anticipo per qualsiasi aiuto / suggerimento.

    
posta Fixingthings 19.08.2017 - 00:50
fonte

1 risposta

2
  1. " se qualcuno spegne js, il campo di input può essere utilizzato per qualsiasi tipo di attacco XSS "? no, hai bisogno di JS per estrarre XSS, ma è comunque necessario un server per fermare altri attacchi come SQLI, collegamenti / download di malware e phishing CSS.

  2. $(elm).html(str) è più pericoloso di elm.innerHTML=str perché carica gli script esterni e eval() s qualsiasi contenuto nei tag di script in linea, mentre innerHTML non esegue tag di script. Entrambi sono suscettibili di attacchi basati su attributi come onmouseover=alert(666) tuttavia, quindi disinfettano tutti i contenuti inviati dall'utente su un server prima di essere pubblicati da altri utenti.

EDIT: dovrei menzionare che puoi tranquillamente usare elm.innerText=str su un input arbitrario, e conserva alcune formattazioni e caratteri speciali desiderati dall'uomo, senza alcun rischio XSS. $(elm).text(str) fa la stessa cosa, quindi è anche sicuro.

    
risposta data 20.08.2017 - 12:59
fonte

Leggi altre domande sui tag