19
EDIT: На будущее, я использую не-Xhtml определение <!html>
Вложение JSON объектов в тегах сценария
Я создаю сайт, используя Django типа контента, и я пытаюсь внедрить произвольные данные в формате JSON мои страницы, которые будут использоваться клиентским кодом javascript.
Скажем, мой объект json - {"foo": "</script>"}
. Если я вставляю это непосредственно,
<script type='text/javascript'>JSON={"foo": "</script>"};</script>
Первый закрывает объект json. (также это сделает сайт уязвимым для XSS, поскольку этот json-объект будет динамически генерироваться).
Если я использую функцию HTML побега Джанго, полученный результат:
<script type='text/javascript'>JSON={"foo": "</script>"};</script>
и браузер не может интерпретировать <script>
тега.
У меня есть вопрос здесь,
- Какие символы я я полагаю, чтобы избежать/не избежать в этой ситуации?
- Есть ли автоматический способ выполнить это в Python/django?
Вы можете использовать ссылки на объекты (<, >) в пределах
Я попытался обратный слэш избежать слэш и что, кажется, работает:
вы пробовали это?
На стороне записки, я удивлен, что встроенный
</script>
тег в строке ломает JavaScript. Сначала не мог поверить, но протестирован в Chrome и Firefox.источник
2010-11-14 07:07:23 slebetman
embedded ломается как ожидаемый (я думал, что это тоже странно), потому что это означает, что синтаксический анализ js должен выполняться по разбору HTML (синтаксический анализатор html должен знать семантику javascript-текста), что кажется мне очень сложным. –
Да, HTML-парсеры, как правило, не говорят на JavaScript. Содержимое тегов скрипта передается интерпретатору только после того, как HTML разобран, а в HTML ничего не сказано о тегах, которые не являются тегами, когда они находятся между кавычками! –
Да, это ожидается - обычный трюк, чтобы предотвратить его разбить тег на два - '' scr "+" ipt> "' –
Я хотел бы сделать что-то вроде этого:
источник
2011-03-21 16:14:35 Elmer
Для этого случая в Python, я открыл в багтрекере в bug. Однако правила действительно сложны, так как
<!--
и<script>
играют довольно злобными способами даже в принятых правилах анализа html5. BTW, ">" не является допустимым escape-кодом JSON, поэтому его лучше заменить на "\ u003E", поэтому абсолютно безопасное экранирование должно состоять в том, чтобы сбежать \ u003C и \ u003E И еще пара злых персонажей, упомянутых в ошибке python. ..источник
2013-07-31 08:00:39