Simile a SQL Injection, attacchi di XPath injection si verificano quando un sito web utilizza le informazioni fornite dall’utente per la costruzione di una query XPath per i dati XML. Con l’invio di informazioni volutamente malformate nel sito web, un utente malintenzionato può scoprire come sono strutturati i dati XML, o dati di accesso che non possono di norma avere accesso. Egli può anche essere in grado di elevare i suoi privilegi sul sito se si utilizzano i dati XML per l’autenticazione (ad esempio un file utente basato su XML). XML Query è fatto con XPath, un tipo di semplice dichiarazione descrittiva che consente alla query XML di individuare un pezzo di informazione. Come SQL, è possibile specificare alcuni attributi per trovare, e modelli da abbinare. Nel caso di utilizzo di XML per un sito web è comune accettare una qualche forma di ingresso sulla stringa di query per identificare il contenuto da localizzare e visualizzare sulla pagina. Questo ingresso deve essere sterilizzato per verificare che esso non danneggi la query XPath e restituire i dati sbagliati. XPath è un linguaggio standard; la sua notazione/sintassi è sempre implementazione indipendente, il che significa che l’attacco può essere automatizzato. Non ci sono diversi dialetti come avviene nelle richieste ai database SQL. Perché non vi è alcun controllo di accesso a livello, è possibile ottenere l’intero documento. Non incontrano alcuna limitazione come accade negli attacchi di SQL injection.
Useremo questo frammento di codice XML per gli esempi.
<? xml version = “1.0” encoding = “utf-8”?>
<> Dipendenti
<ID dipendente = “1”>
<Nome> Arnold </ FirstName>
<Cognome> Baker </ Cognome>
<Nomeutente> Abaker </ username>
<Password> SoSecret </ password>
<Tipo> Amministrazione </ Type>
</ Dipendenti>
<ID dipendente = “2”>
<Nome> Peter </ FirstName>
<Cognome> Pan </ Cognome>
<Nomeutente> PPan </ username>
<Password> </ password> NotTelling
<Tipo> utente </ Type>
</ Dipendenti>
</ Dipendenti>
Supponiamo di avere un sistema di autenticazione utente su una pagina Web che utilizza un file di dati di questo tipo per far accedere gli utenti. Una volta che un nome utente e password sono stati forniti il ​​software può utilizzare XPath per cercare l’utente:
VB:
Dim FindUserXPath as String
FindUserXPath = “// Employee [username / text () = ‘” & Request (“Nome Utente”) e “‘ E
Password / text () = ‘”& Request (” Password “) e”‘] ”

C #:
String FindUserXPath;
FindUserXPath = “// Employee [username / text () = ‘” + Request (“Nome Utente”) + “‘ E
Password / text () = ‘”+ Request (” Password “) +”‘] “;
Con nome utente e password normali questo XPath avrebbe funzionato, ma un utente malintenzionato può inviare una cattiva username e password e ottenere un nodo XML selezionato senza conoscere il nome utente o password, in questo modo:
Nome utente: blah ‘o 1 = 1 o’ a ‘=’ una
Password: blah

FindUserXPath diventa // Employee [username / text () = ‘blah’ o 1 = 1 o
‘un’ = ‘A’ e password / text () ‘blah’ =]

Logicamente questo è equivalente a:
// Employee [(username / text () = ‘blah’ o 1 = 1) o
(‘a’ = ‘A’ e password / text () ‘blah’ =)]
In questo caso, solo la prima parte del XPath deve essere vera. La parte della password diventa irrilevante, e la parte UserName corrisponderà per TUTTI i dipendenti a causa della parte “1 = 1”.