2012-07-02 17 views
5

Attualmente sto utilizzando questo metodo con la soluzione jQuery, per pulire la stringa da possibili attacchi XSS.Sanitizzazione Javascript: il modo più sicuro per inserire la stringa XSS html possibile

sanitize:function(str) { 
    // return htmlentities(str,'ENT_QUOTES'); 
    return $('<div></div>').text(str).html().replace(/"/gi,'&quot;').replace(/'/gi,'&apos;'); 
} 

Ma ho la sensazione che non sia abbastanza sicuro. Mi manca qualcosa?

ho cercato htmlentities da phpjs proiettare qui: http://phpjs.org/functions/htmlentities:425/

ma è un po ostacolate e restituisce alcuni simboli speciali supplementari. Forse è una vecchia versione?

Ad esempio:

htmlentities('test"','ENT_QUOTES'); 

produce:

test&amp;quot; 

ma dovrebbe essere:

test&quot; 

Come stai manipolazione di questo tramite JavaScript?

+0

Come avete intenzione di utilizzare la stringa "puro"? – penartur

+0

Inserire nel documento html ofc come testo. Come href = "sanitized" o src = "sanitized", o

sanitized
Somebody

+0

Da dove viene attivato l'inserto? Vuoi inserire la stringa in una pagina già aperta in modo dinamico usando Javascript o nel documento HTML generato dal server usando PHP? – penartur

risposta

3

Se la stringa deve essere un testo normale senza formattazione HTML, è sufficiente utilizzare .createTextNode(text)/assegnando alla proprietà .data del nodo di testo esistente. Qualsiasi cosa tu metta, sarà sempre interpretata come testo e non necessita di ulteriori fughe.

+0

Che dire di "o" e di altri simboli di cui forse non conosco? – Somebody

+0

Ho scritto "qualunque" ed è "qualunque cosa", dovresti manipolare il campo nella struttura DOM che può contenere solo il testo: tali operazioni non causeranno mai alcuna invocazione automagical di parser HTML come il famoso 'innerHTML' (questo, a proposito, è ancora considerato uno di i peggiori difetti di progettazione di quella caratteristica). –

1

Si dovrebbe citare altri personaggi anche:. ' " < > ( ) ; Tutti possono essere utilizzati per XSS attacsk

3

Sì dinamicamente utilizzando JavaScript Stringa viene da non attendibile. fonte

Quindi non è necessario disinfettarlo manualmente Con jQuery è sufficiente scrivere

​var str = '<div>abc"def"ghi</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​'; 

​$​('test').text(str); 
$('test').attr('alt', str); 

Il browser separerà i dati dal codice per te.

Esempio: http://jsfiddle.net/HNQvd/

+0

Mentre 'alt' è sicuro, avrai ancora problemi con gli attributi che possono essere interpretati come non-testo lungo la linea. Ovviamente 'onclick' e altri gestori, ma anche' src'. –

+0

Tutto potrebbe essere considerato dannoso. Se l'OP sta per cambiare attributi arbitrari (con i nomi forniti dall'utente), allora hanno un problema molto più grande della semplice disinfezione dei valori. – penartur

+0

Persone. Ho una soluzione funzionante nel mio post. Voglio solo che tu sia gente, per aggiornarlo se ha delle vulnerabilità se usato all'interno di

HERE
o o . È tutto. :) – Somebody