Aggiungi i parametri della stringa di query a form.action o a.href utilizzando Javascript?

4

Ho una pagina HTML che accetta qualsiasi numero di parametri della stringa di query, che devo passare alla pagina successiva che l'utente visita facendo clic sui collegamenti sulla mia pagina. In sostanza, se l'utente arriva a

http://example.com/some/page.html?param1=123&param2=567&smthelse=abcde 

La maggior parte di questi parametri di stringa di query ha natura di tracciamento. Devo assicurarmi che quando l'utente fa clic su determinati collegamenti in questa pagina o invii determinati moduli POST, tutte queste stringhe di query vengono passate alla pagina successiva.

Se possibile, sto cercando di evitare di inserire nella whitelist / nella lista nera i parametri della stringa di query che dovrebbero essere passati alla pagina successiva, poiché richiede molta manutenzione. Invece, sto pensando di utilizzare jQuery / Javascript per leggere dinamicamente tutte le stringhe di query e aggiornare gli attributi di attributi e attributi di href href per aggiungere l'intero valore di window.location.search a questi URL.

Esempio ( jsbin ):

$(document).ready(function() {
    var pageQsParams = window.location.search.split('?')[1] || '';

    var newLinkUrl =   $('.link').attr('href') + (pageQsParams ? '?' + pageQsParams : '');
    $('.link').attr('href', newLinkUrl);

    var newFormUrl =   $('#form').attr('action') + (pageQsParams ? '?' + pageQsParams : '');
    $('#form').attr('action', newFormUrl);
}); 

questo codice è vulnerabile a XSS o phishing? Qualche altra vulnerabilità di sicurezza? Qual è il modo migliore per farlo?

    
posta vgrinko 13.02.2017 - 03:22
fonte

1 risposta

1

Questo codice è sicuro.

jQuery.attr non è esportabile tramite caratteri speciali, poiché utilizza un setAttribute internamente.

Poiché imposti gli attributi href / action, devi anche controllare che l'URL non possa essere manipolato da un utente malintenzionato.

Poiché anteponi ? alla stringa di query, avvierà la parte di stringa di query nell'URL finale e impedirai qualsiasi manipolazione di percorso / host, purché gli URL precedenti fossero ben formati e utilizzato un http o% schema dihttps.

Se gli URL precedenti utilizzavano lo schema javascript , sarebbe stato possibile un vettore XSS.

    
risposta data 14.03.2018 - 17:25
fonte

Leggi altre domande sui tag