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 '
).