19
EDIT: Per riferimento futuro, sto usando non xhtml definizione del tipo di contenuto <!html>
Embedding JSON oggetti nel tag script
Sto creando un sito web utilizzando Django, e sto cercando di incorporare i dati JSON arbitrari le mie pagine devono essere utilizzate dal codice javascript lato client.
Diciamo che il mio oggetto JSON è {"foo": "</script>"}
. Se lo incorporo direttamente,
<script type='text/javascript'>JSON={"foo": "</script>"};</script>
Il primo chiude l'oggetto json. (inoltre, renderà il sito vulnerabile a XSS, poiché questo oggetto JSON verrà generato dinamicamente).
Se uso la funzione escape HTML di Django, l'output risultante è:
<script type='text/javascript'>JSON={"foo": "</script>"};</script>
e il browser non può interpretare il tag <script>
.
La domanda che ho qui è,
- cui i personaggi sono io suppongo di fuggire/non sfugge a questa situazione?
- C'è un modo automatico per eseguire questo in Python/django?
È possibile utilizzare i riferimenti di entità (<, >) all'interno di
ho provato backslash sfuggire alla barra e che sembra funzionare:
hai provato?
Su un lato nota, sono sorpreso che la incorporato
</script>
tag in una stringa rompe il javascript. Non potevo crederci all'inizio ma testato in Chrome e Firefox.fonte
2010-11-14 07:07:23 slebetman
embedded è un po 'scontato (ho pensato che fosse strano), perché ciò significa che l'analisi js deve essere eseguita lungo l'analisi HTML (il parser html deve essere a conoscenza della semantica del testo javascript), che mi sembra molto complicato. –
Sì, i parser HTML di regola non parlano JavaScript. I contenuti dei tag di script vengono passati all'interprete solo dopo che l'HTML è stato analizzato e HTML non dice nulla sui tag che non sono tag quando sono tra virgolette! –
Sì, è previsto - il solito trucco per evitare che si spezzi il tag in due - '" scr "+" ipt> "' –
vorrei fare qualcosa di simile:
fonte
2011-03-21 16:14:35 Elmer
Per questo caso in python, ho aperto un bug nel bug tracker. Tuttavia, le regole sono davvero complicate, poiché
<!--
e<script>
giocano insieme in modo abbastanza malvagio anche nelle regole di analisi html5 adottate. BTW, ">" non è un escape JSON valido, quindi sarebbe meglio che fosse sostituito con "\ u003E", quindi l'escape assolutamente sicuro dovrebbe essere quello di escape \ u003C e \ u003E AND un paio di altri personaggi malvagi menzionati nel bug python. ..fonte
2013-07-31 08:00:39