Come sanificare l'input utente in una chiamata POST in linguaggio PHP

15 Aprile 2023

Quando si sviluppa un'applicazione web in PHP, una delle cose più importanti da considerare è la sicurezza. Una delle vulnerabilità più comuni è l'attacco di injection, in cui un utente malintenzionato inserisce codice malevolo all'interno dell'input utente. Questo tipo di attacco può causare seri problemi di sicurezza, come la compromissione del sistema o la divulgazione di dati sensibili. Una delle strategie più efficaci per prevenire questo tipo di attacco è la sanificazione dell'input utente.

In questo articolo, esamineremo come sanificare l'input utente in una chiamata POST in linguaggio PHP. In particolare, discuteremo le diverse tecniche di sanificazione disponibili e come implementarle in modo efficace nella vostra applicazione.

Cos'è l'input utente in una chiamata POST?

Prima di iniziare a parlare della sanificazione dell'input utente, è importante capire cosa sia l'input utente in una chiamata POST. In una chiamata POST, l'input utente è qualsiasi dato inviato dal client al server. Questi dati possono essere inviati attraverso un form HTML o attraverso una richiesta AJAX. L'input utente può includere informazioni come nome utente, password, indirizzo email, numero di telefono, testo libero e così via.

Poiché l'input utente è fornito dall'utente, non si può fare affidamento su di esso. L'utente potrebbe inserire dati in modo errato o intenzionalmente dannosi, come codice JavaScript o SQL. Inoltre, l'utente potrebbe tentare di eseguire attacchi di injection o di cross-site scripting (XSS) per compromettere il sistema.

Come prevenire gli attacchi di injection

Per prevenire gli attacchi di injection, è necessario sanificare l'input utente. La sanificazione dell'input utente è il processo di rimozione di tutti i caratteri non necessari o pericolosi dai dati dell'utente. Ciò significa che tutti i caratteri che non sono numeri, lettere o spazi devono essere eliminati. Inoltre, tutti i caratteri che potrebbero essere utilizzati in un attacco di injection, come le virgolette singole e doppie, devono essere sostituiti con caratteri di escape.

Esistono diverse tecniche di sanificazione disponibili per la chiamata POST. Queste tecniche includono la validazione dei dati, la pulizia dei dati, l'escape dei caratteri e l'uso di prepared statement. Vediamo in dettaglio ognuna di queste tecniche.

Validazione dei dati

La validazione dei dati è il processo di verifica dell'input utente per garantire che sia valido. Questo processo controlla che l'input utente soddisfi determinati criteri, come la lunghezza del testo o il formato dell'indirizzo email. Se l'input utente non soddisfa questi criteri, l'utente riceverà un messaggio di errore.

La validazione dei dati è importante perché può prevenire gli attacchi di injection. Ad esempio, se si richiede all'utente di inserire solo numeri in un campo, qualsiasi tentativo di inserire codice malevolo verrà rilevato come un errore. Tuttavia, la validazione dei dati da sola non è sufficiente per prevenire completamente gli attacchi di injection, poiché l'utente potrebbe ancora inserire caratteri dannosi che superano i controlli di validazione.

Pulizia dei dati

La pulizia dei dati è il processo di rimozione di tutti i caratteri non necessari o pericolosi dai dati dell'utente. Questo processo può essere effettuato con funzioni come trim(), che rimuove gli spazi iniziali e finali, e stripslashes(), che rimuove i caratteri di escape aggiunti alle virgolette singole e doppie. Ci sono anche funzioni specifiche per la pulizia dei dati, come filter_var(), che rimuove tutti i caratteri non validi da un input specificato.

La pulizia dei dati è importante perché rimuove i caratteri dannosi dall'input utente. Tuttavia, anche la pulizia dei dati da sola non è sufficiente per prevenire completamente gli attacchi di injection, poiché l'utente potrebbe ancora inserire caratteri dannosi che non sono rimossi da questa tecnica.

Escape dei caratteri

L'escape dei caratteri è il processo di sostituzione di tutti i caratteri pericolosi con i corrispondenti caratteri di escape. Ciò significa che le virgolette singole e doppie vengono sostituite con i loro caratteri di escape, così come tutti gli altri caratteri che potrebbero essere utilizzati in un attacco di injection.

L'escape dei caratteri è importante perché protegge il sistema da attacchi di injection. Ad esempio, se l'utente inserisce il testo "O'Brien" in un campo di input, le virgolette singole nel testo potrebbero essere utilizzate in un attacco di injection. Tuttavia, se si utilizza la funzione addslashes() per aggiungere i caratteri di escape alle virgolette singole, l'input dell'utente verrà protetto.

Prepared statement

Un prepared statement è una query SQL che viene preparata dal server prima dell'esecuzione. Questo processo impedisce agli attacchi di injection di avere successo perché i parametri dell'input utente vengono separati dalla query SQL.

Per utilizzare un prepared statement, è necessario utilizzare un'interfaccia di database che supporti questa funzionalità, come PDO o MySQLi. Con un prepared statement, l'input utente viene passato come parametro alla query SQL, anziché essere inserito direttamente nella query.

Sanificare l'input utente in una chiamata POST in PHP

Ora che abbiamo esaminato le diverse tecniche di sanificazione dell'input utente, vediamo come implementarle in una chiamata POST in PHP.

Validazione dei dati

Per validare l'input utente, è possibile utilizzare la funzione filter_var(). Questa funzione controlla che l'input utente soddisfi determinati criteri, come il formato dell'indirizzo email o la lunghezza del testo.

Ad esempio, per verificare che un campo di input sia un indirizzo email valido, è possibile utilizzare il seguente codice:

$email = $_POST['email'];
if (!filter_var($email, FILTER_VALIDATE_EMAIL

Altri articoli dal nostro Tech Blog

24 Marzo 2025
Cos'è una VPN e perchè potrebbe servirti (aggiornato al 2025)

Devi connetterti al tuo server aziendale? Aggirare un blocco dell’IP (ovviamente, per fini etici)? Oppure anche solo assicurarti che la connessione su cui stai navigando mantenga i tuoi dati al sicuro? Per ognuno di questi casi, e per molti altri, la VPN è la tecnologia di cui hai bisogno. Se ne hai sentito parlare e […]

22 Marzo 2025
Vibe Coding: da Copilot a Cursor, l'ascesa degli IDE assisiti dall'AI

Negli ultimi mesi, il modo in cui sviluppatori e programmatori si approcciano alla scrittura del codice è profondamente cambiato, introducendo il concetto di "Vibe Coding" grazie a strumenti di Intelligenza Artificiale che automatizzano e semplificano la scrittura e revisione del codice. Tra i principali IDE con l'assistenza dell'AI troviamo Visual Studio Code (VSCode) con Copilot […]

18 Marzo 2025
La guida definitiva all'hosting: dove ospitare app e siti web

Dove ospitare la tua applicazione web o mobile: guida definitiva a hosting condivisi, VPS, VDS, server dedicati e piattaforme Cloud pubbliche (AWS, Azure, Google Cloud) Quando si decide di sviluppare una nuova applicazione web o mobile, la scelta della giusta soluzione di hosting rappresenta una fase fondamentale per garantire buone prestazioni, sicurezza adeguata e facilità […]

15 Marzo 2025
La direttiva NIS2 e le responsabilità del management: quali rischi per CEO, CIO e CISO?

La nuova direttiva europea sulla sicurezza informatica, nota come NIS2, introduce significativi cambiamenti rispetto alla precedente direttiva NIS, ampliando la platea delle organizzazioni coinvolte e assegnando responsabilità precise ai vertici aziendali. CEO, CIO e CISO sono chiamati direttamente in causa, con implicazioni rilevanti sia dal punto di vista legale che organizzativo. Le principali novità della […]

Richiedi un incontro

Compila il form per ottenere una consulenza personalizzata per il tuo progetto.

Compila i campi per essere ricontattato

© Pizero Design srl, tutti i diritti riservati - P.I. 02313970465 - REA LU-215417
X
lockuserscartcalendar-fullsmartphonelaptopbriefcase