Convalidare i dati non di input da un client?

3

Uno dei nostri sviluppatori ha un'opinione secondo cui tutti i dati dei clienti devono essere convalidati prima di usarli. Anche dati non di input.

Dì, il nostro servizio web ha una protezione interna contro le iniezioni di database.

Esempi: codici generati dal computer, vari numeri interi, indici, valori calcolati.

Usiamo ORM (Django). Come so, c'è un altro approccio in Django: convalidare solo i valori immessi come stringhe primarie (solitamente tramite moduli Web).

Ad esempio: esiste un motivo per creare regole di convalida per convalidare i numeri se sappiamo che c'è un errore 500th (se i dati sono errati) all'inizio della richiesta di gestione? Penso che nessuno. Ma probabilmente mi sbaglio.

La mia posizione deve essere cambiata?

    
posta sergzach 18.02.2014 - 16:01
fonte

3 risposte

8

Devi SEMPRE convalidare ANY i dati che vengono inseriti nel tuo database, prima o dopo che è stato effettivamente inserito nel tuo programma di database. Preferibilmente entrambi, se possibile.

Ovviamente, dovremmo scrivere il software correttamente la prima volta, tutti dovrebbero pagare le tasse in tempo, e nessuno dovrebbe mai imbrogliare sul loro coniuge. Solo perché qualcosa è una buona regola non significa che devi seguirla ciecamente.

Il tuo altro sviluppatore ha ragione, in quel client i dati dovrebbero essere convalidati, se è dato come file XML o JSON o CSV o come formato di backup binario del fornitore del database. Alcuni di questi renderanno la convalida più semplice (XML + backup binario), ma dovresti sempre avere un piano per "cosa succede se questi dati sono corrotti o dati in modo completamente errato."

Per lo meno:

  1. Avere un backup del database che puoi facilmente ripristinare se trovi il database post-import corrotti
  2. Non importare subito nella produzione. Esegui prima l'importazione nel tuo ambiente di sviluppo o test.
  3. Controllare i conteggi dei record nel file importato, nel database di pre-importazione e nel database di post-importazione. Se non corrispondono chiaramente, esegui il rollback dell'importazione fino a quando non puoi spiegare la discrepanza.

Per il credito bonus, insegna a chi ti sta inviando dati su come eseguire un CRC su un file e chiedi loro di fornirlo tramite una copertura separata.

    
risposta data 18.02.2014 - 16:14
fonte
4

Il cliente può moderare i dati che ti inviano, quindi non è possibile garantire che il proprio codice lato client abbia generato i dati non di input. Tuttavia, non dovresti essere obbligato a impedire a un client di bruciarsi da solo quando tenta di hackerare il tuo sistema.

Chiediti: i dati non validi in quei campi non di input sono un problema solo per il cliente o sono un problema per il tuo sistema e / o altri client?

Se si tratta di un problema per il sistema e / o altri client, quindi validarlo con tutti i mezzi. Non vuoi che gli altri client subiscano errori di hacking e non vuoi che il tuo server venga violato.

Tuttavia, se si tratta di un problema solo per il tuo cliente, non devi fare di tutto per risolverlo. Dopo tutto, loro stanno hackerando il tuo sistema. Vuoi proteggere i tuoi clienti dagli errori quando utilizzano l'interfaccia utente o il servizio Web che fornisci, ma se provano a trovare backdoor e commettono errori, dovrebbe essere il loro problema.

Ad esempio, se il codice lato client raccoglie i dati delle impostazioni locali dalla macchina client in modo che il server possa generare correttamente i formati di tempo e di numero e convertirli in unità appropriate durante il rendering delle pagine. Il client ha violato il modulo di registrazione e inviato i dati di registrazione direttamente tramite richiesta HTTP, ma hanno sbagliato il formato locale e ora ottengono le date nel calendario Gibberish e le lunghezze sono visualizzate in Sterline.
Dico: è il loro vero problema per l'hacking del tuo sistema!

Puoi essere più gentile e convalidare quei dati per loro, ma nessuno dovrebbe biasimarti per un supporto di hacking scadente ...

Detto questo, dovresti assicurarti che sia così prima di decidere di non convalidare quei dati. Ad esempio, se il client pubblica i dati che vengono analizzati in base alle sue impostazioni internazionali e visualizzati su altri client, dovrai verificare le impostazioni locali in modo da non rovinare i dati per gli altri utenti.

    
risposta data 18.02.2014 - 16:30
fonte
1

Personalmente, penso che l'applicazione client, deve fornire un ambiente ideale per eseguire correttamente le funzioni della soluzione software (che include anche il back-end).

is there any reason to create validation rules to validate numbers

Perché l'applicazione web dovrebbe consentirmi di fare errori?

La convalida nel client non riguarda il sistema di sicurezza, perché ovviamente non ha la possibilità di giocare quel ruolo, ma deve essere considerata una soluzione di usabilità .

    
risposta data 19.02.2014 - 07:41
fonte

Leggi altre domande sui tag