Domanda

Output o il filtraggio di ingresso?

ho sempre vedere la gente scrivere "filtro Ingressi", "sterilizzare gli ingressi", fare i dati degli utenti non si fidano, ma sono d'accordo solo con l'ultimo, in cui considero confidando tutti i dati esterni è una cattiva idea, anche se si tratta di relativa interna al sistema.

Filtro di ingresso: Il più comune che vedo. Prendere i dati del modulo postali o qualsiasi altra fonte esterna di informazioni e definire alcuni confini durante il salvataggio, ad esempio assicurandosi che il testo è un testo, i numeri sono numeri, che SQL è SQL valida, che HTML è valido html e che non contiene dannosi markup, e quindi si salva i dati "sicuri" nel database.

Ma quando il recupero dei dati è sufficiente utilizzare i dati grezzi dal database.

A mio parere personale, i dati non è mai veramente sicuro. Anche se suona semplice, basta filtro tutto quello che si ottiene dalle forme e url, in realtà è molto più difficile di quello, potrebbe essere sicuro per una lingua, ma non un altro.

Output filtraggio: Quando facendo in questo modo ho salvare i dati inalterati prime, qualunque esso sia, con le istruzioni preparate nel database e poi filtrare il codice problematico quando l'accesso ai dati, questo ha il proprio vantaggi: Questo aggiunge un livello tra HTML e lo script lato server. che ritengo essere i dati di accesso di separazione di sorta.

Ora dati vengono filtrati in base al contesto, ad esempio, posso avere i dati dal database presentato in un documento HTML come semplice escape-testo o html o come qualcosa da nessuna parte.

Gli svantaggi sono qui che non si deve mai dimenticare di aggiungere il filtraggio che è un po 'più difficile che con ingresso filtraggio e utilizza un po' più di CPU quando si forniscono i dati.

Questo non significa che non c'è bisogno di fare controlli di convalida, è ancora fare, è solo che non si salvano i dati filtrati, convalidare e fornire all'utente un messaggio di errore se i dati sono in qualche modo non valido.

Così, invece di andare con "filtrare gli ingressi" forse dovrebbe essere "validare gli ingressi, filtrare i risultati".

quindi dovrei andare con "La convalida dell'input e filtrando" o "convalida ingresso e uscita di filtraggio"?

È stato utile?

Soluzione

Non c'è generico "filtro" per l'ingresso e l'uscita.

Convalida il tuo ingresso, sfuggire l'output. Come si esegue questa operazione dipende dal contesto.

convalida è di fare in modo di ingresso rientra nel range sensibili, come la lunghezza delle stringhe, la numericality degli importi in dollari o che un record aggiornato è di proprietà dell'utente che esegue l'aggiornamento. Questo è di mantenere la coerenza logica dei dati e impedire alle persone di fare le cose come l'azzeramento del prezzo di un prodotto che acquistano o l'eliminazione di record che non dovrebbero avere accesso. Non ha nulla a che fare con "filtro" o fuga caratteri specifici nel vostro ingresso.

Escaping è una questione di contesto, e solo in realtà ha un senso quando si sta facendo qualcosa con i dati che possono essere avvelenati iniettando alcuni caratteri. Fuga caratteri HTML nei dati inviati al browser. Caratteri di escape SQL in dati inviati al database. Fuga virgolette quando si sta scrivendo i dati all'interno JavaScript tag <script>. Basta essere consapevoli di come i dati hai a che fare con sta per essere interpretato da parte del sistema si sta passando a fuggire e di conseguenza.

Altri suggerimenti

La soluzione migliore è quella di filtrare entrambi. Facendo un solo rende più probabile che si dimentica di un caso, e può lasciare che si apre ad altri tipi di attacchi.

Se lo fai solo il filtro di ingresso, un utente malintenzionato potrebbe trovare un modo per bypassare il vostro input e la causa di una vulnerabilità. Questo potrebbe essere qualcuno che ha accesso al database inserimento manuale dei dati, potrebbe essere un attaccante caricare un file tramite FTP o qualche altro canale che non è selezionata, o molti altri metodi.

Se lo fai solo il filtro di uscita, è possibile lasciare apritevi alla SQL injection e altri attacchi lato server.

Il metodo migliore è quello di filtrare entrambi gli ingressi e le uscite. Essa può causare un carico maggiore, ma riduce notevolmente il rischio di un attaccante trovare una vulnerabilità.

Suoni come la semantica per me. In entrambi i casi la cosa importante da ricordare è quello di rendere i dati sicuri cattivi non ottiene nel sistema.

Facendo uscita filtraggio invece di filtraggio ingresso chiede un'iniezione SQL.

alt text

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