2011-02-03 1 views

risposta

26

Si dovrebbe chiamare questo metodo solo quando si fanno eco i dati in HTML.

Non memorizzare codice HTML con escape nel database; renderà le query più fastidiose.
Il database deve memorizzare i dati effettivi, non la sua rappresentazione HTML.

+0

Grazie. Ma quando provo a memorizzare tag PHP nel database "" non sarei in grado di farlo a meno che non utilizzi in anticipo htmlspecialchars(). – khr2003

+1

@ khr2003 non memorizzare php nel db, non è mai una buona idea. –

+1

Sono d'accordo ma faranno parte di bbcode quando inseriremo un post. – khr2003

11

È possibile utilizzare htmlspecialcharsOGNI tempo di output del contenuto all'interno dell'HTML, quindi è interperted come contenuto e non HTML.

Se si consente il contenuto di essere trattato come HTML, si è appena aperto il varco ai bug al minimo e gli hack XSS totali nel peggiore dei casi.

+0

Stai fraintendendo la domanda. – SLaks

4

Salva la parte esatta che l'utente inserisce nel database. quindi quando lo si visualizza al pubblico, utilizzare htmlspecialchars(), in modo che offra una protezione xss.

+0

Ma lui sta chiedendo ** PERCHE '** di farlo ?? Non hai fornito un motivo nella tua risposta. Si prega di prendere in considerazione la modifica. –

0

Guida - Come usare htmlspecialchars() in PHP

Per cominciare bisogna capire 1 semplice concetto: Render.

Che rendering è? Render è quando il codice HTML trasforma

<b>Hello</b> 

a audace come questa Ciao. Questo è il rendering.

Quindi ... Quando utilizzare la funzione htmlspecialchars()?

Ovunque si desideri visualizzare i contenuti HTML. Per esempio, se si utilizza JQuery e si esegue questa operazione:

$("#YourDiv").html("<b>Hello</b>"); 

Il contenuto div sarà Ciao. Ha reso il testo in HTML.

Se si desidera visualizzare il messaggio in questo modo (è stato scritto dall'utente):

<b>Hello</b> 

devi mettere:

$("#YourDiv").text("<b>Hello</b>"); 

In questo modo il Ciao non sarà mai reso.

Se si desidera caricare il messaggio (come ha scritto dall'utente) in una casella di testo, textarea, ecc ... Dovete mettere:

<input type="text" class="Texbox1" value=""> 

<script> 
$(".Textbox1").val("<b>Hello</b>"); 
</script> 

che visualizzerà

<b>Hello</b> 

Dentro la casella di testo senza problemi.

Conclusione:

Che cosa mai dati l'input dell'utente nelle vostre forme, ecc ... salvare i dati come normalmente. Non utilizzare alcuna funzione. Se l'utente ha inviato 12345 salva come è. Non filtrare nulla. Devi solo filtrare quando hai intenzione di mostrare i dati nella pagina agli utenti. TU, SOLO decidi se vuoi rendere o meno ciò che l'utente ha scritto. *Ricordatelo.

Saluti!