Home » Sicurezza Wordpress » Validazione e sanificazione dei dati

Validazione e sanificazione dei dati

La WordPress Security API offre una vasta gamma di funzioni di convalida e sanificazione dei dati.

Queste funzioni sono state create con l’intento di fornire agli sviluppatori di applicazioni WordPress un modo semplice, coerente e collaudato per aderire ai principi di sicurezza di WordPress.

Validazione

La convalida (validazione) è l’atto di controllare l’input per assicurarsi che sia nel formato previsto.

Come indicato nella documentazione di WordPress, vogliamo valutare un valore fornito dall’utente rispetto a un pattern e restituire un risultato valido o non valido.

Un semplice esempio è il controllo di un indirizzo email fornito tramite un campo email di un modulo per assicurarsi che contenga la sintassi corretta specificata in RFC 5322. 

Ciò significa che non può essere vuoto, non può contenere due caratteri @ e così via.

La validazione è un modo per filtrare l’input non attendibile fornito dall’utente.

Funzioni di validazione comuni

Di seguito sono riportate alcune funzioni di validazione comunemente utilizzate e disponibili nella WordPress Security API.

  • is_email() : verifica se un indirizzo email è valido.
  • tag_escape() : Nonostante il nome, questa funzione convalida una stringa fornita dall’utente per l’output come tag HTML.
  • is_numeric() : convalida che l’input sia un numero.
  • in_array() : controlla se un valore è presente in un array.

L’uso corretto delle funzioni di validazione di WordPress aiuta a prevenire gli attacchi.

I ricercatori di vulnerabilità dovranno seguire il flusso dei dati da una sorgente a un sink e prendere nota delle funzioni di validazione in uso, se presenti.

Sanitizzazione

La sanitizzazione è una convalida meno specifica . La sanitizzazione dei dati consiste nel rimuovere o filtrare i dati indesiderati dall’input fornito dall’utente.

Ad esempio, la funzione sanitize_email() di sanitizzazione elimina i caratteri non consentiti negli indirizzi email.

Questa è una buona funzione da analizzare per confrontare e comprendere meglio la convalida e la sanificazione.

Ricordate che la funzione is_email() controlla un indirizzo email fornito dall’utente per verificarne la validità e restituisce un valore valido/non valido o vero/falso.

D’altra parte, la funzione sanitize_email() accetta una stringa fornita dall’utente (che presumibilmente dovrebbe essere un indirizzo email) ed elimina i caratteri che non dovrebbero essere presenti, restituendo un valore stringa privo dei caratteri eliminati.

Funzioni comuni di sanificazione

Di seguito sono riportate alcune funzioni di sanificazione comunemente utilizzate e disponibili nella WordPress Security API .

sanitize_email()

Rimuove i caratteri non validi da un indirizzo email prima che venga utilizzato o memorizzato in un database.

  • Spazi vuoti : rimossi
  • Caratteri di controllo (caratteri non stampabili) : rimossi
  • Caratteri speciali non consentiti nella parte locale di un indirizzo email : eliminati (ad esempio, () , : ; < > [ \\ ])
  • Caratteri non validi nella parte del dominio : eliminati o corretti (ad esempio, rimozione di spazi, punteggiatura non valida)

sanitize_file_name()

Questa funzione ha due obiettivi: (1) garantire che il nome del file sia compatibile con un’ampia gamma di sistemi operativi e (2) non contenga determinati caratteri speciali o sequenze di caratteri che sono considerati non validi o richiedono l’escape.

  • Spazi vuoti sostituiti con - (trattino)
    • Ingresso: my file name.jpg
    • Uscita: my-file-name.jpg
  • Caratteri non ASCII convertiti in equivalenti ASCII o rimossi
    • Ingresso: café.png
    • Uscita: cafe.png
  • Segni percentuali (%) rimossi
    • Ingresso: 100%free.pdf
    • Uscita: 100free.pdf
  • Caratteri di controllo (\0–\31) rimossi
    • Ingresso: file\x00name.txt
    • Uscita: filename.txt
  • Caratteri speciali (&, #, ?, *, <, >, |, “, ;, :, ,, +, =) eliminati o sostituiti
    • Ingresso: file&name#1.jpg
    • Uscita: filename1.jpg
  • Punti (.) Ridotti a un singolo punto (ad esempio, ..vengono ridotti a .)
    • Ingresso: my..file.name.jpg
    • Uscita: my.file_.name_.jpg
  • Sequenze di attraversamento del percorso :
    • Ingresso: ../../etc/passwd
    • Uscita: etcpasswd

sanitize_text_field()

Elimina i caratteri potenzialmente dannosi dai campi di testo.

  • Tag HTML : completamente rimossi
    • Ingresso: <script>alert('XSS');</script>
    • Uscita: (Stringa vuota)
  • Caratteri di controllo rimossi
    • InputHello\x00World(dove \x00è un byte nullo)
    • Output: HelloWorld
  • Caratteri UTF-8 non validi completamente rimossi
    • Input : Hello\xC0\x80World(codifica UTF-8 troppo lunga per byte nullo)
    • Output : (Stringa vuota)
  • Spazi extra : ridotti (riduce gli spazi iniziali/finali e riduce gli spazi multipli)
  • Nuove righe, tabulazioni (\n, \t) convertiti in spazi singoli
    • Ingresso: Hello\nWorld\tTest
    • Produzione: Hello World Test

wp_kses()

Una funzione di sanificazione che può essere personalizzata per consentire il passaggio solo di un set specifico di elementi e attributi HTML.

Questa funzione viene in genere utilizzata quando gli sviluppatori desiderano consentire un HTML limitato negli input utente, come nei commenti o nei campi personalizzati, eliminando al contempo eventuali tag o attributi potenzialmente dannosi.

Si noti che wp_kses() prevede almeno due parametri di funzione. Il primo è l’input da sanificare e il secondo i tag o i protocolli consentiti.

  • Tag HTML non consentiti
    • Ingresso: <div>Hello <strong>World</strong></div>
    • Uscita :Hello <strong>World</strong>
    • Spiegazione: il tag <div> viene eliminato perché non è incluso nell’array dei tag consentiti, ma <strong> è consentito.
  • Attributi non consentiti
    • Ingresso: <a href="http://example.com" style="color:red;">Link</a>
    • Uscita: <a href="http://example.com">Link</a>
    • Spiegazione: l’attributo style è stato rimosso perché non è presente nell’elenco degli attributi consentiti per il tag <a>.
  • Gestori di eventi JavaScript
    • Ingresso: <a href="http://example.com" onclick="alert('XSS')">Link</a>
    • Uscita: <a href="http://example.com">Link</a>
    • Spiegazione: l’attributo onclick viene rimosso per impedire attacchi XSS.
  • Tag di script/stile
    • Ingresso: <style>body {background-color: red;}</style><p>Text</p>
    • Uscita: <p>Text</p>
    • Spiegazione: il tag <style> e il suo contenuto vengono rimossi perché considerati non sicuri.

wp_kses_post()

Una versione specializzata di wp_kses() progettata per sanificare i contenuti generati dagli utenti per i post.

Consente una gamma più ampia di tag e attributi HTML tipicamente utilizzati nei contenuti dei post, rendendolo ideale per i campi che richiedono testo formattato (ad esempio grassetto, corsivo, sottolineato, ecc.) impedendo comunque l’inclusione di codice potenzialmente dannoso.

  • Tag HTML non sicuri
    • Ingresso: <h1>Title</h1><iframe src="http://example.com"></iframe>
    • Uscita: <h1>Title</h1>
    • Spiegazione: il tag <iframe> è stato eliminato perché non è consentito nei contenuti dei post standard.
  • Attributi non sicuri
    • Ingresso: <img src="image.jpg" onerror="alert('XSS')">
    • Uscita: <img src="image.jpg">
    • Spiegazione: l’attributo onerror è stato rimosso perché potrebbe introdurre XSS.


Traduzione in italiano della WordPress Security Research di Wordfence

WordPress Security Architecture

Lascia un commento