filtraggio del contenuto nell'intestazione disposizione Content

4

Stavo leggendo "The Tangled Web" (Un libro che mi sta piacendo moltissimo) e ho un dubbio nel seguente estratto tratto da: -

When Handling User-Controlled Filenames in Content-Disposition Headers
 If you do not need non-Latin characters: Strip or substitute any characters except for alpha- numerics, “.”, “-”, and “_”. To protect your users against potentially harmful or deceptive filenames, you may also want to confirm that at least the first character is alphanumeric and substitute all but the rightmost period with something else (e.g., an underscore).
Keep in mind that allowing quotes, semicolons, backslashes, and control characters (0x00–0x1F) will introduce vulnerabilities.
 If you need non-Latin names: You must use RFC 2047, RFC 2231, or URL-style percent encoding in a browser-dependent manner. Make sure to filter out control characters (0x00–0x1F) and escape any semicolons, backslashes, and quotes.
  • Quali sono i caratteri che devono essere codificati in percentuale dell'URL?
  • Per "escape di punti e virgola, barre rovesciate e virgolette", si sta eseguendo l'escape utilizzando barre rovesciate?
posta 29.10.2012 - 16:36
fonte

2 risposte

3

Consentire l'input controllato dall'utente nell'intestazione HTTP è molto pericoloso. Avrei una rigida whitelist di valori possibili.

Inoltre, l'escaping non viene sempre eseguito con una barra rovesciata. Le barre rovesciate a volte si applicano ai dati quotati, ma sempre. In questo caso un'entità HTML o una codifica URL sarebbero al sicuro.

    
risposta data 29.10.2012 - 17:04
fonte
4

If you need non-Latin names: You must use RFC 2047, RFC 2231, or URL-style percent encoding in a browser-dependent manner. Make sure to filter out control characters (0x00–0x1F) and escape any semicolons, backslashes, and quotes.

Non ci andate nemmeno. Nascosto dietro le parole "browser-dependent" è un insieme di regole di escape incoerenti e incomplete che variano selvaggiamente tra i vari browser. Annusare il tipo di browser e pubblicare una codifica diversa per casi diversi non è affatto fattibile ... anche se l'hai fatto (e gestito Vary / cache correttamente per farlo corrispondere), ci sono caratteri che sono impossibili da codificare per ognuno dei i browser.

Which are the characters meant to be URL percent encoded?

Su IE, ; , " e qualsiasi cosa non-ASCII. Su qualsiasi altro browser, la codifica percentuale in Content-Disposition non è efficace.

By "escaping semicolons, backslashes, and quotes", is escaping using backslashes meant?

Sì, ma solo Opera lo supporta correttamente IIRC.

Alla fine le regole di RFC 6266 risolveranno questo macabro caos, ma il supporto non è ancora lì. Se vuoi caratteri arbitrari Unicode nel nome del file di download, l'unico modo affidabile per farlo è mettere il nome file falso in una parte finale del percorso URL, UTF-8-URL-codificato (stile IRI) ad esempio: p>

http://www.example.com/download.cgi/h%c3%a9llo%20%e6%97%a5%e6%9c%ac.dat

risultati nel download filename héllo 日本.dat .

    
risposta data 30.10.2012 - 11:05
fonte

Leggi altre domande sui tag