Domanda

Attualmente ho un sistema di validazione lato server abbastanza robusto, ma sto cercando un feedback per assicurarmi di aver coperto tutti gli angoli. Ecco una breve descrizione di ciò che sto facendo in questo momento:

  • Assicurati che l'input non sia vuoto o sia troppo lungo

  • Escape delle stringhe di query per impedire l'iniezione SQL

  • Uso delle espressioni regolari per rifiutare i caratteri non validi (dipende da ciò che viene inviato)

  • Codifica di alcuni tag html, come < script > (tutti i tag sono codificati quando archiviati in un database, con alcuni decodificati quando richiesto per il rendering nella pagina)

C'è qualcosa che mi manca? Esempi di codice o espressioni regolari sono ben accette.

È stato utile?

Soluzione

Non dovresti aver bisogno di " Escape " stringhe di query per impedire l'iniezione di SQL: dovresti invece utilizzare istruzioni preparate.

Idealmente il tuo filtro di input avverrà prima di qualsiasi altra elaborazione, quindi sai che verrà sempre usato. Perché altrimenti devi solo perdere un punto per essere vulnerabile a un problema.

Non dimenticare di codificare entità HTML in output - per prevenire attacchi XSS.

Altri suggerimenti

Dovresti codificare ogni tag html, non solo quelli 'non validi'. Questo è un acceso dibattito, ma sostanzialmente si riduce a una combinazione HTML non valida che dimenticherete di gestire correttamente (tag nidificati, tag non corrispondenti che alcuni browser interpretano "correttamente" e così via). Quindi, a mio avviso, l'opzione più sicura è quella di archiviare tutto come htmlentities e quindi, in output, stampare un albero validato HTML-subset (come entità) dal contenuto.

Esegui tutta la convalida lato server in una libreria dedicata all'attività in modo che i miglioramenti in un'area interessino l'intera applicazione.

Includi inoltre il lavoro contro attacchi noti, come l'attraversamento delle directory e i tentativi di accedere alla shell.

Questa domanda / risposta ha delle buone risposte che stai cercando
( Orientato a PHP, ma poi non hai specificato linguaggio / piattaforma e alcuni di questi si applicano oltre il mondo php ):

  

Qual è il metodo migliore per disinfettare l'input dell'utente con PHP?

Puoi controllare Estensione filtro per il filtraggio dei dati. Non garantirà che tu sia completamente ermetico, ma personalmente mi sento molto meglio usandolo perché quel codice ha un sacco di occhi su di esso.

Inoltre, considera le istruzioni preparate distaccate. L'escape dei dati nelle tue query SQL è un ricordo del passato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top