Quando diciamo "sanità mentale" quando ci riferiamo all'input dell'utente, stiamo parlando della pulizia dell'input o del fatto che sia o meno sensato?

6

Spesso sento le persone dire che "sanitizzano l'input", il che significherebbe renderlo pulito. Capisco che ciò significhi "pulizia di contenuti potenzialmente dannosi", in cui la funzione che disinfetta fa qualcosa di simile alla fuga dei caratteri.

Ma poi sento cose come "input sensato", che per me significa che l'input non è una stringa in cui era previsto un double, o "January 3rd of Nineteen Ninety Five" dove "1995/01/03" sarebbe sono stato corretto. Questo rappresenta una questione di formattazione.

Quindi abbiamo "funzioni di sanità", che gestiscono l'input dell'utente per renderlo utilizzabile dal back-end del software. Può riferirsi a entrambi i tipi di convalida dell'input? Ha a che fare solo con la formattazione (come "input sensato"), o con la pulizia dell'input (come "input igienizzato")? Sono due diverse classi di operazioni, o la sanità mentale in questo caso si riferisce solo ad entrambi? Ho sempre pensato che si riferisse a sanitizzarlo (se questo in realtà significa qualcosa di diverso dal renderlo sano di mente) dal momento che pensavo che "sanità mentale" fosse una radice per "sanificare". Ma ho appena controllato e non riesco a trovare alcuna definizione di "sanità mentale" che abbia nulla a che fare con la pulizia o la disinfezione.

Esistono idiomi per ciascuna di queste operazioni che non conosco o sono sempre solo "funzioni di sanità" che fanno entrambe queste cose? Sarebbe fonte di confusione vedere le funzioni "sanità" e "sicurezza"?

    
posta Carson Myers 12.07.2011 - 09:09
fonte

3 risposte

5

Input sano significa input accettabile per ulteriori elaborazioni. Non deve essere pericoloso - solo sbagliato. Dì,

  • quantità frazionaria di articoli venduti solo in unità intere.
  • Il nome di una persona che contiene caratteri di nuova riga.
  • Un indirizzo casella postale per pacco pagato dopo ricezione.
  • Un valore contrario ai regolamenti ufficiali.
  • Una descrizione testuale in cui viene accettato solo il numero.
  • Data non valida, come il 31 febbraio.
  • Un valore fuori dai limiti ragionevoli, diciamo, data di nascita due secoli fa.
  • Indirizzo email senza il carattere @. E così via.
  • Nome con spazi finali alla fine.

A volte sanificare significa solo adattarsi allo standard desiderato, ovvero modificare data e ordine delle separazioni, in modo che l'1/1/2011 si trasformi nel 2011-01-01, o spogliare gli spazi bianchi alle estremità, o capitalizzare il codice paese ecc. Talvolta è limitandolo a valori sani, hai diritto al rimborso del 100%, non al 18000%. A volte sta scartando dati incomprensibili o inutili, ad esempio, codice postale inesistente renderà l'intero indirizzo non valido e un numero errato di cifre nel numero di conto renderà impossibile il trasferimento di denaro.

La disinfezione contro l'iniezione SQL o altri attacchi è solo un margine dell'operazione.

Modifica: Sì, praticamente entrambi sono un sottoinsieme dello stesso problema: rendere i dati adatti per ulteriori elaborazioni.

Se il tuo database è stato abbandonato perché qualcuno ha scritto '; DROP DATABASE;-- come nome utente è lo stesso insieme di problemi quando qualcuno ha scritto 0 come quoziente e il tuo back-end ha fatto scoppiare una divisione per zero, o come quando qualcuno ha rubato soldi da qualcun altro account inserendo un valore negativo nel campo importo di un bonifico bancario, o come il tuo pacco è stato restituito al mittente perché hai accettato il numero di telefono al posto del codice postale.

    
risposta data 12.07.2011 - 09:24
fonte
2

Qualcosa sembra trascurare tutti: "disinfettare" significa "rendere sanitari", cioè pulire, non "rendere sani".

Quindi, "input di sanitizzazione" significa ripulire l'input normalizzandolo o rimuovendo parti non necessarie o inutili, ma con l'asserzione di base che l'input è generalmente sano di mente ma probabilmente imperfetto in alcuni aspetti. Questo spesso si applica agli input forniti dagli utenti.

"Controllo della sanità", d'altra parte, significa identificare e rifiutare l'input che è fondamentalmente rotto. Questo è generalmente utilizzato per i dati forniti da altri sistemi o automaticamente, che dovrebbe essere impeccabile. Il controllo della sanità mentale è fondamentalmente una forma di programmazione difensiva (fail-fast).

    
risposta data 12.07.2011 - 11:23
fonte
1

Esiste un'intera catena di cose che possono essere considerate come misure igieniche di input:

  • Evitamento degli errori lato client significa costruire l'interfaccia utente in modo che alcuni errori umani (diversi da quelli dannosi) siano impossibili . Ciò include l'impostazione delle lunghezze dei campi di input, l'uso di selettori di date, elenchi di selezione che aggiornano per contenere solo selezioni valide e scartando qualsiasi carattere non numerico digitato in un campo numerico. Qualsiasi logica qui non dovrebbe essere duplicata nella validazione lato client.
  • Validazione lato client controlla l'input per gli errori degli utenti che possono superare l'elusione degli errori. Esempi ovvi includono spazi bianchi finali (non si sa fino al momento dell'invio che l'utente non ha intenzione di aggiungere un'altra parola) o due punti in un numero. Questo dovrebbe non controllare le cose che sono segni di bot (come stringhe più lunghe della lunghezza massima del campo di input), perché i risultati del test saranno semplicemente ignorati.
  • Filtro dell'input lato server utilizzando una lista nera o una lista bianca è probabilmente la definizione più comune di servizi igienico-sanitari: rimuovi i dati da input che non ritieni che il sistema sia in grado di gestire correttamente e restituisci un errore se il il risultato è ritenuto non utilizzabile.
  • Controllo dell'integrità dell'input lato server potrebbe essere necessario se l'interfaccia utente non è in grado, in qualche modo, di verificare alcune parti dell'input. Ad esempio, un calcolo o una comunicazione di terze parti potrebbe richiedere troppo tempo per essere eseguito in modo interattivo dal codice di evitamento degli errori lato client.
  • L'escaping sul lato server è la buona sorella gemella del filtraggio. Eseguendo l'escape una sola volta e solo una volta su input e output, ti assicuri che l'intero stack sia in grado di gestire qualsiasi input generato.
  • Le restrizioni del database sono il checkpoint finale e ci dovrebbe essere abbondanza di convalida (chiavi esterne, lunghezze e tipi di dati sensati, trigger se necessario) per garantire che un inserimento dati sia atomico e che il risultato di un commit riuscito è utilizzabile. Eventuali errori rilevati a questo livello dovrebbero essere un'indicazione sicura di tentativi volontari di sabotaggio.

Sanity può quindi fare riferimento a formattazione (date, int), validità (password, IBAN), computability (espressione regolare, formula matematica ), e semplicemente pulizia (spazi finali)

    
risposta data 12.07.2011 - 10:47
fonte

Leggi altre domande sui tag