PIATTAFORMA: PHP & mySQLPHP & mySQL: quando utilizzare esattamente htmlentities?
Per i miei scopi di sperimentazione, ho provato alcune delle iniezioni XSS io stesso sul mio sito web. Considera questa situazione in cui ho inserito il mio modulo textarea. Poiché si tratta di un'area di testo, sono in grado di inserire testo e tutti i tipi di caratteri (inglesi). Ecco le mie osservazioni:
A). Se applico solo strip_tags e mysql_real_escape_string e non uso htmlentities sul mio input appena prima di inserire i dati nel database, la query si interrompe e sono colpito da un errore che mostra la struttura della mia tabella, a causa della terminazione anomala.
B). Se sto applicando strip_tags, mysql_real_escape_string e htmlentities sul mio input appena prima di inserire i dati nel database, , la query NON si sta interrompendo e sono in grado di inserire correttamente i dati dalla textarea nel mio database.
Quindi capisco che le risorse devono essere utilizzate a tutti i costi, ma non sono sicuro quando esattamente dovrebbe essere usato. Con in mente quanto sopra, vorrei sapere:
Quando esattamente devono essere utilizzati htmlentities? Dovrebbe essere usato prima di inserire i dati nel DB o in qualche modo ottenere i dati in DB e quindi applicare htmlentities quando sto cercando di mostrare i dati dal DB?
Se seguo il metodo descritto nel punto B) sopra (che credo sia la soluzione più ovvia ed efficiente nel mio caso), devo ancora applicare htmlentities quando sto cercando di mostrare i dati dal DB ? Se è così, perché? Se no, perché no? Lo chiedo perché è davvero fonte di confusione per me dopo Ho passato con la posta a: http://shiflett.org/blog/2005/dec/google-xss-example
Poi c'è questa funzione un altro PHP chiamato: html_entity_decode. Posso usarlo per mostrare i miei dati dal DB (dopo aver seguito la mia procedura come indicato nel punto B) poiché htmlentities è stato applicato al mio input? Quale preferisco tra: html_entity_decode e htmlentities e quando?
ANTEPRIMA PAGINA:
ho pensato che potrebbe contribuire ad aggiungere alcuni dettagli più specifici di una situazione specifica qui. Considera che esiste una pagina di 'Anteprima'. Ora quando invio l'input da una textarea, la pagina di anteprima riceve l'input e lo mostra in html e allo stesso tempo, un input nascosto raccoglie questo input. Quando viene premuto il pulsante di invio sul pulsante Anteprima, i dati dall'input nascosto vengono POST su una nuova pagina e quella pagina inserisce i dati contenuti nell'input nascosto nel DB. Se non applico htmlentities quando il modulo è inizialmente inviato (ma si applicano solo strip_tags e mysql_real_escape_string) e c'è un input malevolo nella textarea, l'input nascosto è rotto e gli ultimi pochi caratteri dell'input nascosto sono visti visibilmente come " />
nella pagina , che è indesiderabile. Tenendo questo a mente, ho bisogno di fare qualcosa per preservare l'integrità dell'ingresso nascosto correttamente nella pagina di anteprima e ancora raccogliere i dati nell'input nascosto in modo che non si rompa. Come faccio a fare questo? Scusa per il ritardo nella pubblicazione di queste informazioni.
Grazie in anticipo.
Solo un suggerimento: la maggior parte delle volte, non dovresti usare htmlentities, ma htmlspecialchars. htmlentities converte una tonnellata di caratteri, mentre htmlspecialchars converte solo quelli che DEVONO essere convertiti. –
@ Michael Madsen: Grazie per il suggerimento. Il modulo accetta tutti gli input che è possibile inserire utilizzando una tastiera basata negli Stati Uniti. Quindi ho avuto questa idea che usare htmlentities lo renderà più sicuro, nel caso qualcuno provasse a copiare e incollare manualmente alcuni caratteri strani da qualche altro sito web o dal proprio sistema locale. Quindi ho deciso di usare htmlentities. Cosa ne pensi? – Devner
Non ha senso. Sì, i personaggi strani potrebbero sembrare ... beh, strano sul tuo sito. Ma non lo stai evitando usando htmlentities, perché le entità sono solo un modo diverso di rappresentare lo stesso personaggio. Non hanno alcun significato speciale in HTML, quindi non c'è alcun vantaggio nel tradurli - il risultato finale sarà lo stesso, userà solo più byte per guardare in quel modo. –