Come si rendono sicuri i dati JSON in un'applicazione web django?Uso sicuro di JSON con html all'interno del JSON nei modelli di Django
Sul server in django generato dati JSON e quindi il rendering dei dati JSON in un modello django. Talvolta JSON contiene frammenti di html. La maggior parte delle volte va bene, tuttavia se il tag </script>
si trova all'interno dei dati JSON al momento del rendering, distrugge il javascript circostante.
Per esempio ...
Sul server, in python avrò questo:
template_data = {
'my_json' : '[{"my_snippet": "<b>Happy HTML</b>"}]'
}
# pass the template data to the django template
return render_to_response('my_template.html', template_data, context_instance = c)
E poi nel modello:
<script type="text/javascript">
var the_json = {{my_json|safe}};
</script>
... some html ...
Il html risultante funziona correttamente e assomiglia a questo:
<script type="text/javascript">
var the_json = [{"my_snippet": "<b>Happy HTML</b>"}];
</script>
... some html ...
Tuttavia, si esegue in problemi quando, sul server, il JSON è simile al seguente:
template_data = {
'my_json' : '[{"my_snippet": "Bad HTML</script>"}]'
}
return render_to_response('my_template.html', template_data, context_instance = c)
Ora, quando è reso, si otterrà:
<script type="text/javascript">
var the_json = [{"my_snippet": "Bad HTML</script>"}];
</script>
... some html ...
Il tag di script di chiusura all'interno del codice JSON viene considerato come la chiusura dell'intero blocco di script. Tutto il tuo javascript si romperà.
Una possibile soluzione è controllare </script>
quando si passano i dati del modello al modello, ma mi sembra che ci sia un modo migliore.
Si potrebbe servire come JSON (tramite la tecnologia AJAX) o servirlo come un file javascript (quindi includerlo usando un tag script). – DanielB