-----------------------------------

Acquista i software ArcGIS tramite Studio A&T srl, rivenditore autorizzato dei prodotti Esri.

I migliori software GIS, il miglior supporto tecnico!

I migliori software GIS, il miglior supporto tecnico!
Azienda operante nel settore GIS dal 2001, specializzata nell’utilizzo della tecnologia ArcGIS e aderente ai programmi Esri Italia Business Network ed Esri Partner Network

-----------------------------------



venerdì 31 gennaio 2014

SQL injection

SQL injection è una tecnica molto diffusa dell'hacking che attacca applicazioni web che si appoggiano a DBMS di tipo SQL. In pratica questo exploit sfrutta l'inefficienza dei controlli sui dati di input inserendo codice maligno all'interno di query SQL per, ad esempio, autenticarsi in un sito,  modificare dati o leggere informazioni del db.
Vediamo un semplicissimo esempio ma giusto per far capire il problema perchè le tecniche dell'hacking SQL injection ma anche Blind SQL injection possono essere molto più sofisticate utilizzando funzioni del database sottostante.
Supponiamo di avere una pagina web di login con user e password per l'autenticazione ad un sito:

Nel pulsante di login lo sviluppatore ha scritto codice del tipo:
    
string sqlLogin = "Select Id from tblUsers where User='" + TxtUser.Text + "' and pwd='" + txtPwd.Text + "'";

Ora se sulla pagina web scriviamo, per accedere come utente Pippo, qualcosa del tipo:

La stringa che verrà eseguita nel database sarà:

Select Id from tblUsers where User='Qualsiasi cosa' and pwd='' Or User = 'Pippo'

che sarà vera per l'utente Pippo avendo aggiunto come operatore logico una disgiunzione inclusiva.

ArcGIS Server, via SOAP o REST permette ovviamente di interrogare i dati e quindi potrebbe non essere immune a questo tipo di vulnerabilità.  
Dalla versione 10.2 abbiamo a disposizione in ArcGIS Server un'opzione di sicurezza che obbliga gli sviluppatori ad utilizzare interrogazioni SQL standard quando si lavora con i servizi di mappa, feature, image e WFS attraverso REST o SOAP. Questo aiuta a prevenire gli attacchi SQL injection ed inoltre rende più facile la vita per gli sviluppatori e le applicazioni che interrogano i servizi ArcGIS Server. Le query standardizzate vengono applicate per impostazione predefinita, ma possono essere disattivate​ dall'amministratore del server.
Per disabilitare questa opzione di sicurezza e quindi rendere più vulnerabile il sistema agli attacchi SQL injection è possibile loggarsi all'Administrator directory (http://myserver:6080/arcgis/admin) e impostare nella finestra di dialogo in system -> properties -> update :

{"standardizedQueries": "false"}
 

Cliccare su update e riavviare ArcGIS Server.

Se, quando si visualizza la finestra di dialogo non è presente nessuna proprietà o {"standardizedQueries": "true"}, allora significa che le query standardizzate sono attive. Occorre ricordare che le query standardizzate sono applicate a tutto il site e pertanto non è possibile abilitarle solo per alcuni servizi e non per altri. Lo sviluppatore ha la possibilità di verificare se uno specifico layer o tabella del servizio è impostato per le query standardizzate direttamente all'end point :  

http://myserver:6080/myinstance/rest/services/folder/service/service type/0.



In questo link potete verificare quali sono le funzioni SQL che è possibile utilizzare per generare query standardizzate che possono essere utilizzate nelle applicazioni per interrogare servizi di mappa, feature, image e WFS.
Quando le query standardizzate sono abilitate ArcGIS Server verifica la sintassi standard e non consente le funzioni e le sintassi specifiche del database. Pertanto se lo sviluppatore utilizza funzioni specifiche del database o rivede le proprie query o dovrà disabilitare le query standardizzate a livello di site.
Le query standardizzate hanno delle limitazioni: non sono supportate su join tra workspace differenti; inoltre tabelle di database a cui si accede attraverso un file di connessione OLE connection non sono supportate. Se i dati del servizio contengono queste sorgenti, è necessario utilizzare metodi alternativi per fare riferimento ai vostri dati. Anche le Subqueries nella clausola WHERE non sono supportate.