Protecting a href = '{{my_model.some_url}}' in Django

3

Nel mio modello Django, ho un link come questo:

<a href='{{ my_model.some_url }}'>

Il some_url bit è un Django URLField che un utente può influenzare.

Questo può essere sfruttato in qualche modo? (Ciò che viene in mente è includere una citazione nell'URL e HTML arbitrario.)

Che cosa posso fare per proteggere questo codice?

    
posta Ram Rachum 04.03.2014 - 11:49
fonte

1 risposta

2

In generale ci sono schemi URL validi che sono pericolosi. Ovviamente javascript: , che come pseudo-URL non si riferisce a una nuova posizione, ma a un comando da eseguire sulla pagina corrente. Se aggiungi un javascript: URL da aggiungere alla tua pagina significa che hai un problema di scripting cross-site.

Esistono anche altri alias di script ( vbscript: , mocha: et al), nonché data: e qualsiasi numero di gestori di protocolli arbitrari che il software di terze parti potrebbe aver installato sul client. Pertanto, in genere devi inserire nella whitelist gli schemi URL.

L'URLValidator predefinito di Django per URLField esegue questa operazione, consentendo solo i collegamenti http, https, ftp e ftps, quindi, purché non siano stati sostituiti i validatori, dovrebbe essere OK. (Potresti desiderare di farlo, se questo non è l'insieme di schemi che vuoi.) Se hai altri mezzi per popolare il campo some_url che non passa attraverso il campo / validatore normale allora devi fare sicuro che sia anche convalidato.

(What comes to mind is including a quote in the URL and then arbitrary HTML.)

Finché non hai disabilitato autoescape , l'escape HTML predefinito fornito da {{...}} templating lo impedisce (codifica correttamente le virgolette singole in &#39; ).

    
risposta data 04.03.2014 - 13:42
fonte

Leggi altre domande sui tag