Approfondimenti. Il controllo di SQL Injection nelle pagine ASP e ASP.NET. U.A. 5 - Database in rete con le pagine ASP e ASP.



Documenti analoghi
La tecnologia ASP.NET e i database

19. LA PROGRAMMAZIONE LATO SERVER

Cookie e Webstorage. Vediamo ora i metodi dell oggetto localstorage. Per memorizzare un valore si utilizza il metodo setitem:

Programmazione Web. Laboratorio 4: PHP e MySQL

Le query. Lezione 6 a cura di Maria Novella Mosciatti

Javascript: il browser

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Lezione V. Aula Multimediale - sabato 29/03/2008

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti

Editor vi. Editor vi

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

I file di dati. Unità didattica D1 1

MDAC. Attualmente la versione disponibile di MDAC è la 2.8 ma faremo riferimento alla 2.6. ADO Active Data Objects ADO OLE DB ODBC

extensible Markup Language

Corso BusinessObjects SUPERVISOR

JAVASCRIPT. Tale file è associato alla pagina web mediante il tag <script> inserito nella sezione <head> con la seguente sintassi:

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

MANUALE UTENTE Modulo PUBLISHING DDT MaNeM ver. 5.0

Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini

NOZIONI BASE SHELL E SCRIPT LINUX

Sistemi informativi e Telemedicina Anno Accademico Prof. Mauro Giacomini

6. Applicazione: gestione del centro sportivo Olympic

Simulazione seconda prova Esame di Stato Sito Web - Gestione di un centro agroalimentare all ingrosso (Parte seconda)

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

Il blog di Emanuele Mattei in ambito Database

SMS API. Documentazione Tecnica YouSMS HTTP API. YouSMS Evet Limited

Mariano Pirrotta. A c t i v e S e r v e r P a g e * * *

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

MySQL Database Management System

Integrazione InfiniteCRM - MailUp

GERARCHIE RICORSIVE - SQL SERVER 2008

User Tools: DataBase Manager

Traccia di soluzione dell esercizio del 25/1/2005

--- PREMESSE INTRODUZIONE. .:luxx:.

2104 volume III Programmazione

Esercizi di JavaScript

Volumi di riferimento

Procedura di. Registrazione Utente, Creazione profilo Azienda. Assegnazione deleghe

Introduzione al Foglio Elettronico

Matematica in laboratorio

Questo modello di programmazione può essere utilizzato sia nelle:

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

PIATTAFORMA DOCUMENTALE CRG

Accesso a basi di dati con ASP. Algoritmo per visualizzare un DB

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

Il sistema operativo UNIX/Linux. Gli script di shell

SWISSCAST. Descrizione della modalità di esportazione di documenti in pagine HTML

Esercitazione 8. Basi di dati e web

Una metodologia di progettazione di applicazioni web centrate sui dati

Documentazione del progetto Classe 5 Cp A.s. 2011/2012

Manuale d utilizzo della componente di console di monitoraggio

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

Sicurezza Informatica: Tecniche di SQL INJECTION

Corso ForTIC C2 LEZIONE n. 8. Cos'è la shell Le variabili d'ambiente L'uso della shell per la realizzazione di semplici script

Corso di PHP. Prerequisiti. 1 - Introduzione

Le espressioni regolari.

ESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi terza

ALLEGATO 1. Dichiarazione iniziale per il test e il collaudo della rete telematica: Archivio da consegnare a seguito dell aggiudicazione provvisoria.

G S M C O M M A N D E R Duo S

FRANCESCO MARINO - TELECOMUNICAZIONI

ASP: DOMANDE E RISPOSTE (Q&A)

Struttura logica di un programma

Corso basi di dati Installazione e gestione di PWS

Sistema Informativo di Teleraccolta EMITTENTI

Al giorno d oggi, i sistemi per la gestione di database

Documentazione API web v 1.0

Le Basi di Dati. Le Basi di Dati

2 - Modifica Annulla Selezione finestra. S.C.S. - survey CAD system FIGURA 2.1

Dati importati/esportati

ISI s.r.l. Corso di Access 05 CREARE UN ELENCO MAILING ED INVIARE MESSAGGI DI POSTA ELETTRONICA Pag. 1/6

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

A. Lorenzi Pagine ASP

Corso sul linguaggio SQL

Definizione di domini

PHP e MySQL. Guida scaricata da

IOL_guidaoperativa_gestione_allegati-1 0.doc 1 INTRODUZIONE ALL USO DELLA GUIDA SIMBOLI USATI E DESCRIZIONI GESTIONE ALLEGATI...

Guida pratica all utilizzo della consultazione del sistema Giurisprudenza Siracusana

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

Backup e Restore di un database PostgreSQL Sandro Fioravanti INFN-LNF

Stream EDitor (sed) sed NON modifica l'input 2. L'output viene inviato allo standard output e puo' essere rediretto

La struttura dati ad albero binario

Gli algoritmi: definizioni e proprietà

Sicurezza dei file Le protezioni nei programmi

Utilizzo del Terminalino

Corso di Informatica

Plate Locator Riconoscimento Automatico di Targhe

Elementi di semantica operazionale

2 - Modifica Annulla ANNULLA TOPOGRAFICO ANNULLA TOPOGRAFICO MULTIPLO FIGURA 2.1

Guida all accesso al portale e ai servizi self service

La gestione documentale con il programma Filenet ed il suo utilizzo tramite la tecnologia.net. di Emanuele Mattei (emanuele.mattei[at] .

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Progettazione di un Database

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Le variabili di Visual Basic consentono di memorizzare temporaneamente valori durante

Transcript:

U.A. 5 - Database in rete con le pagine ASP e ASP.NET 269 Il controllo di SQL Injection nelle pagine ASP e ASP.NET Approfondimenti Con il termine SQL Injection si intende l aggiunta di istruzioni SQL nell input che l utente fornisce nel browser tramite un form HTML. Viene utilizzato dagli utenti non autorizzati (hacker) per accedere ai database senza controlli e senza identificazione oppure per far eseguire comandi SQL diversi da quelli previsti dall applicazione. Poiché questo comporta rischi per la sicurezza dei database, è importante prevenire l inserimento di codice SQL indesiderato (nel gergo informatico, malicious SQL, codice doloso). Per comprendere come funziona l SQL Injection, si consideri la pagina Web che richiede all utente lo username e la password per accedere a un servizio Internet. Essa contiene due caselle di testo all interno di un form HTML, denominate utente e password, e richiama l esecuzione di una pagina ASP che legge dalla tabella Utenti di un database l elenco degli utenti autorizzati, controllando che i dati forniti corrispondano all identificativo dell utente. Supponiamo che la tabella Utenti contenga, per ogni riga, due soli campi: username e password. I seguenti frammenti di codice descrivono le principali operazioni svolte dalla pagina ASP. acquisizione dei dati dal form della pagina Web: commando SQL: strsql = "Select * From Utenti " strsql = strsql & "Where " strsql = strsql & "username ='" & user & "' and " strsql = strsql & "password ='" & pwd & "'" esecuzione del comando SQL e controllo dei dati: Set rs = conn.execute(strsql) If not(rs.eof) Then Response.Write("utente identificato") Response.Write("utente non identificato") Se l utente fornisce come username user1 e come password passw1, il comando SQL nella pagina ASP diventa: Select * From Utenti Where username ='user1' And password ='passw1' Se l utente esiste nel database, il processo di identificazione fornisce esito positivo.

270 U.A. 5 - Database in rete con le pagine ASP e ASP.NET Supponiamo ora che l utente inserisca per lo username, o per la password o per entrambi, la seguente sequenza di caratteri: 1' Or '1' = '1 Poiché l apice è il delimitatore delle stringhe, il comando SQL diventa: Select * From Utenti Where username ='1' Or '1' = '1' And password ='1' Or '1' = '1' Le condizioni scritte dopo Or sono sicuramente vere ('1' = '1'), rendendo complessivamente vere le condizioni per lo username e la password: il controllo di identificazione viene superato in modo positivo. In questo modo un utente potrebbe accedere ai dati senza conoscere username e password. Per impedire l SQL Injection occorre stabilire permessi di accesso più restrittivi per gli utenti del database e inserire all interno delle pagine ASP meccanismi di validazione dei dati forniti dall utente, prima che essi vengano utilizzati per l accesso alle tabelle del database. Di seguito vengono illustrati alcuni metodi di validazione dei dati. Sostituzione degli apici con i doppi apici L apice viene sostituito con il doppio apice in modo che non possa essere interpretato come delimitatore di stringhe: user = Replace(user,"'","''") pwd = Replace(pwd,"'","''") La funzione predefinita Replace sostituisce all interno della stringa, indicata come primo parametro, tutte le occorrenze del carattere indicato come secondo parametro con i caratteri del terzo parametro. Validazione dei caratteri inseriti Con questa seconda tecnica ciascun carattere delle stringhe fornite dall utente viene controllata per vedere se corrisponde a un carattere alfabetico (maiuscolo o minuscolo) oppure a una cifra numerica. caratteri = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789" ok1 = True For i = 1 To Len(user) car = Mid(user, i, 1 ) If (InStr(caratteri,car) = 0) Then

U.A. 5 - Database in rete con le pagine ASP e ASP.NET 271 ok2 = True For i = 1 To Len(pwd) car = Mid(pwd, i, 1 ) If (InStr(caratteri,car) = 0) Then If (ok1 = True And ok2 = True) Then accesso alla tabella del database Response.Write("Inserimento dati non corretto") Il codice precedente utilizza alcune funzioni stringa predefinite del linguaggio VBScript: - Len restituisce la lunghezza di una stringa; - Mid estrae una sottostringa da una stringa; - InStr trova la posizione della prima occorrenza di una stringa all interno di un altra stringa e restituisce il valore 0 in caso di esito negativo per la ricerca. Validazione con controllo dei comandi SQL La terza modalità controlla che le stringhe fornite dall utente non contengano comandi SQL oppure il carattere apice, oppure i caratteri che in molte versioni del linguaggio SQL indicano l inizio di frasi di commento; l inserimento di un commento, infatti, fa perdere il significato di codice alla rimanente parte del comando SQL previsto dal programmatore nell applicazione. Le parole da controllare sono contenute in un array di 8 elementi. Anche questo codice utilizza la funzione InStr per la ricerca di una sottostringa all interno di una stringa, con l aggiunta del parametro vbtextcompare per indicare il confronto testuale. Il primo parametro 1 indica che la ricerca deve iniziare dal primo carattere. parole = array("select","insert","update","delete","drop","alter", " ", "'") ok1 = True For i = 0 To 7 If (InStr(1,user,parole(i),vbtextcompare) <> 0) Then ok2 = True For i = 0 To 7 If (InStr(1,pwd,parole(i),vbtextcompare) <> 0) Then ok2 = False

272 U.A. 5 - Database in rete con le pagine ASP e ASP.NET If (ok1 = True And ok2 = True) Then accesso alla tabella del database Response.Write("Inserimento dati non corretto") Uso dei parametri nei comandi SQL delle pagine ASP.NET Le pagine ASP.NET consentono di utilizzare i parametri nei comandi SQL costruiti dinamicamente nell applicazione. L uso dei parametri è un buon metodo per prevenire l SQL Injection. La seguente pagina ASP.NET illustra le modalità per l identificazione dell utente tramite username e password, vista negli esempi precedenti. Essa utilizza l oggetto Parameter di ADO.NET (si chiama OleDbParameter per i database di Access e SqlParameter per i database di SQLServer) che consente di memorizzare le informazioni del parametro, da aggiungere ad un oggetto Command. I parametri sono indicati all interno della stringa del comando SQL con un nome preceduto dal carattere @. L aggiunta di un parametro (Add) all oggetto Command, con assegnazione del valore, è effettuato con un istruzione come la seguente: dbcomm.parameters.add(new OleDbParameter("@param1", utente.text)) Essa assegna al parametro, denominato @param1, il valore acquisito tramite la casella di testo utente del form HTML. Si noti anche l uso della proprietà HasRows dell oggetto DataReader: essa assume il valore True se il DataReader, ottenuto dall esecuzione del comando SQL possiede righe (has rows), cioè non è vuoto. PAGINA ASP.NET (login.aspx) <%@ Page Language="VB" %> <%@ Import Namespace="System.Data.OleDb" %> <script runat="server"> Sub Page_Load() lbl1.text="login " End Sub Sub Submit(sender As Object, e As EventArgs) Dim dbconn as OleDbConnection Dim dbcomm as OleDbCommand Dim dbread as OleDbDataReader Dim strsql As String dbconn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & server.mappath("db1.mdb")) dbconn.open() strsql = "Select * From Utenti "

U.A. 5 - Database in rete con le pagine ASP e ASP.NET 273 strsql &= "Where " strsql &= "username =@param1 and password=@param2" dbcomm=new OleDbCommand(strSQL,dbconn) dbcomm.parameters.add(new OleDbParameter("@param1", utente.text)) dbcomm.parameters.add(new OleDbParameter("@param2", password.text)) dbread=dbcomm.executereader() If dbread.hasrows Then lbl2.text = "utente identificato" lbl2.text = "utente non identificato" dbread.close() dbconn.close() End Sub </script> <html> <head> </head> <body> <form runat="server"> <asp:label id="lbl1" runat="server" font-bold="true"></asp:label> username: <asp:textbox id="utente" runat="server"></asp:textbox> password: <asp:textbox id="password" runat="server" TextMode="Password"></asp:TextBox> <asp:button id="button1" onclick="submit" runat="server" Text="Invia"></asp:Button> <asp:label id="lbl2" runat="server"></asp:label> </form> </body> </html> Si osservi che la proprietà TextMode per la casella di testo della password è impostata al valore Password, per impedire la visualizzazione dei caratteri durante la digitazione dell utente.