2009-11-13 2 views

risposta

8

Non so cosa intendi per "vulnerabilità", ma c'è un errore che molte persone fanno con le sezioni CDATA. Ciò accade quando un programmatore pigro non capisce veramente l'escape del testo e cerca di evitare il normale processo di codifica di caratteri speciali in XML in &. Essi pensano di poter farla franca:

print "<element><![CDATA["+textstring+"]]></element>"; 

e mentre questo sarà davvero fermare un carattere < o & in textstring essere trattato come markup, non è a tenuta stagna, perché textstring potrebbe contenere una sequenza ]]>, con conseguente:

<element><![CDATA[ Foo ]]> <bar>I'm an unexpected element!</bar> ]]></element> 

Questa è un'iniezione XML, che come un'iniezione HTML potrebbe potenzialmente avere un impatto sulla sicurezza simile a XSS.

Quindi avresti ancora bisogno di sfuggire alcune sequenze in CDATA (di solito, dividerei una sequenza ]]> tra due sezioni CDATA). In pratica, l'utilizzo di CDATA non è più semplice del semplice codice &, che codifica il contenuto del testo nel modo normale. Quindi in realtà non c'è motivo di usare mai una sezione CDATA.

0

Vulnerabile a cosa? Un attacco di iniezione di qualche tipo? CDATA dice al parser di passare il contenuto senza analizzarlo, quindi se stai convalidando il tuo XML suppongo che la sezione CDATA non superi la fase di validazione.

Il codice che utilizza lo stream XML deve disporre di una sorta di convalida aziendale che va oltre la convalida dello schema, pertanto si è solo a rischio se non si riesce a verificare gli input prima di utilizzarli.

2

Una sezione CDATA è semplicemente un altro modo di rappresentare i dati dei caratteri all'interno di un documento XML. Significa esattamente la stessa cosa di qualsiasi altro testo (non tag) in un documento, tranne che è sfuggito in modo diverso.

Non esiste alcuna "vulnerabilità" aggiuntiva associata a CDATA (ad eccezione dei bug nella libreria di analisi XML, ovviamente).

+0

ma cosa succede se il testo inserito tra gli elementi di cdata non viene analizzato dal parser. un utente malintenzionato può conservare un tipo di dati che estrae tutti i comandi di sistema dell'applicazione di destinazione poiché non viene analizzato dal parser xml. penso che questo sia un tipo di vulnerabilità. – Madhan

+0

Solo perché il contenuto di una sezione CDATA non è '&' -escaped non significa che un parser gli invierà che sia eseguito come comandi, sarebbe pazzesco. Sarà gestito allo stesso modo di qualsiasi altro testo normale. – bobince

+0

I dati nei blocchi CDATA * sono * analizzati dal parser. In particolare, il parser XML sta cercando la sequenza finale ']]>'. Tutto il resto viene trattato come dati carattere. –