Jak bezpiecznie renderować dane JSON w webmasterze django?Bezpieczne używanie JSON-a z html wewnątrz JSON-a w szablonach Django
Na serwerze w django generuję dane JSON, a następnie renderuję dane JSON w szablonie django. JSON sporadycznie zawiera fragmenty html. Najczęściej jest to w porządku, jednak jeśli znacznik </script>
znajduje się w danych JSON, gdy jest renderowany, niszczy otaczający javascript.
Na przykład ...
Na serwerze, w python Muszę to:
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)
A potem w szablonie:
<script type="text/javascript">
var the_json = {{my_json|safe}};
</script>
... some html ...
The w wyniku html działa dobrze i wygląda tak:
<script type="text/javascript">
var the_json = [{"my_snippet": "<b>Happy HTML</b>"}];
</script>
... some html ...
jednak pojawią się problemy, gdy na serwerze, JSON wygląda następująco:
template_data = {
'my_json' : '[{"my_snippet": "Bad HTML</script>"}]'
}
return render_to_response('my_template.html', template_data, context_instance = c)
Teraz, kiedy jest renderowane, dostaniesz:
<script type="text/javascript">
var the_json = [{"my_snippet": "Bad HTML</script>"}];
</script>
... some html ...
Tag zamykającego skryptu w kodzie JSON jest traktowany jako zamknięcie całego bloku skryptu. Cały twój javascript się zepsuje.
Jednym z możliwych rozwiązań jest sprawdzenie, czy </script>
przekazuje dane szablonu do szablonu, ale mam wrażenie, że istnieje lepszy sposób.
Można go służyć jako json (za pośrednictwem AJAX) lub podawaj go jako plik javascript (następnie dołącz go za pomocą znacznika skryptu). – DanielB