2009-02-08 7 views
5

Quando si emette l'input dell'utente, si usa solo htmlspecialchars() o sono ci sono funzioni/azioni/metodi si esegue anche? Sto cercando qualcosa che si occuperà anche di XSS.Esegui solo htmlspecialchars() in uscita o ci sono altre funzionalità che fai anche tu?

mi chiedo se avrei dovuto scrivere una funzione che sfugge input dell'utente sull'uscita o semplicemente usare htmlspecialchars(). Sto cercando i casi generici, non i casi specifici che possono essere trattati individualmente.

risposta

10

Io di solito uso

htmlspecialchars($var, ENT_QUOTES) 

su campi di input. Ho creato un metodo che lo fa perché lo uso molto e rende il codice più breve e più leggibile.

+1

Perché utilizzare "ENT_QUOTES" (piuttosto che "ENT_NOQUOTES" come suggerito da me)? –

+2

Io uso ENT_QUOTES per i campi di input con i dati dal database. Quindi se i dati non hanno "o" non chiuderanno la variabile di valore all'interno del tag di input –

+1

Ólafur: sì, nei campi di input (o più in generale gli attributi) ha un certo senso. ;-) –

7

Diamo una breve recensione del perché è necessaria fuga in diversi contesti:

Se vi trovate in una stringa delimitata preventivo, è necessario essere in grado di sfuggire le virgolette. Se siete in xml, allora avete bisogno di separare "contenuto" da "markup" Se siete in SQL, è necessario separare "comandi", da "dati" Se siete sulla riga di comando, è necessario separare "comandi", da "dati"

Questo è un aspetto veramente di base dell'informatica in generale. Poiché la sintassi che delimita i dati può verificarsi nei DATI, deve esserci un modo per differenziare i DATI da SYNTAX, quindi evadendo.

In programmazione web, i casi in fuga comuni sono: 1. Emissione testo in HTML 2. dati output in HTML attributi 3. Emissione HTML in HTML 4. Inserimento dati in JavaScript 5. dati Inserimento in SQL 6. Inserimento di dati in un comando shell

Ognuno ha implicazioni di sicurezza diverse se gestito in modo errato. QUESTO È DAVVERO IMPORTANTE! Rivediamo questo nel contesto di PHP:

  1. testo in HTML: htmlspecialchars (...)

  2. dati in HTML attributi htmlspecialchars (..., ENT_QUOTES)

  3. HTML in HTML utilizzare una libreria come HTMLPurifier per garantire che solo i tag validi sono presenti.

  4. Dati in Javascript Preferisco json_encode. Se lo si inserisce in un attributo, è comunque necessario utilizzare # 2, ad esempio

  5. Inserimento di dati in SQL Ogni driver ha una funzione escape() di qualche tipo. È meglio Se stai utilizzando un normale set di caratteri Latin1, addslashes (...) è adatto. Da non dimenticare le virgolette intorno al addslashes() chiamata:

    "INSERT INTO Table1 SET field1 = '". addslashes ($ data)."'"

  6. dati sulla linea di comando escapeshellarg() e escapeshellcmd() - leggere il manuale

- prendere questi a cuore, e si eliminerà il 95% * dei comuni rischi per la sicurezza web! (* a indovinare)

-5

Non si dovrebbe pulire il testo sull'output, dovrebbe avvenire sull'input. Io uso un filtro che filtra tutti gli input per l'applicazione. È configurabile in modo che possa consentire tag/dati specifici quando necessario (ad esempio per un editor wysiwig).

È consigliabile eseguire il minimo possibile di elaborazione del testo sull'output in modo da garantire la velocità. Elaborarlo una volta crea molto meno sforzo quindi elaborandolo 5000000 volte.

+0

Vorrei sono d'accordo con te, tranne che generalmente la teoria è di accettare solo input validi, ma devi comunque uscire dall'output. Il problema arriva quando qualcuno inserisce una citazione nel loro nome utente, tu esci t per HTML diventa inutile per la generazione di PDF. –

+0

Ecco cosa, se si sta programmando questo per il web, quante volte verrà visualizzato sul versetto Web esportato come PDF. Presumo che tu non stia generando PDF al volo su ogni vista. Quindi il mio punto è forte, nel caso di un'esportazione PHP è possibile invertire semplicemente l'output. – Syntax

+0

Bene, la regola conferma che si desidera memorizzare i dati degli utenti nel modo più esatto possibile nel database e all'uscita modificarli secondo necessità. Lavoro su alcuni siti in cui il 50% di Web/HTML e il 50% sono PDF/Excel/ecc. –

Problemi correlati