Domanda

Semplice domanda che continua a infastidirmi.

Devo codificare immediatamente l'input dell'utente e archiviare i contenuti codificati nel database, oppure devo archiviare i valori non elaborati e la codifica HTML durante la visualizzazione?

La memorizzazione di dati codificati riduce notevolmente il rischio che uno sviluppatore dimentichi di codificare i dati quando vengono visualizzati. Tuttavia, l'archiviazione dei dati codificati renderà il datamining un po 'più complicato e occuperà un po' più di spazio, anche se di solito non è un problema.

È stato utile?

Soluzione

Suggerirei vivamente di codificare le informazioni in uscita. l'archiviazione dei dati non elaborati nel database è utile se si desidera modificare la modalità di visualizzazione a un certo punto. il flusso dovrebbe essere qualcosa di simile a:

sanitize user input -> protect against sql injection -> db -> encode for display

pensa a una situazione in cui potresti voler visualizzare le informazioni come feed RSS. dover ripetere qualsiasi codifica HTML specifica prima di visualizzare nuovamente sembra un po 'sciocco. qualsiasi sviluppo deve sempre seguire il "non fidarsi dell'input" meme, indipendentemente dal fatto che tale input provenga da un utente o dal database.

Altri suggerimenti

La codifica deve essere eseguita solo sul display. Senza eccezioni.

Output.

Con HTML non puoi semplicemente controllare la lunghezza di una stringa ( & amp; amp; è di 1 carattere, ma strlen () ti dirà 5), puoi facilmente ritagliarlo (potrebbe spezzare le entità).

Potrebbe essere necessario mescolare stringhe dal database con stringhe di un'altra origine o leggerle e riscriverle. Fare questa applicazione senza perdere alcuna evasione ed evitare una doppia fuga è un incubo.

PHP ha provato a fare cose simili con magic_quotes e si è rivelato un enorme fallimento. Non prendere la rotta magic_entities ! :)

Tieni presente che potresti dover accedere al database con qualcosa che non comprende il testo codificato in HTML (ad esempio uno strumento di reporting). Sono d'accordo che lo spazio non è un problema, ma IMHO, inserendo la codifica HTML nel database sposta la conoscenza della vista / front-end nel livello più basso dell'applicazione e questo è un errore di progettazione.

Questo non sconfigge lo scopo della codifica? Se viene immesso uno script sql dannoso come input, che viene quindi passato al database, potrebbe causare un problema enorme.

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