2014-09-16 7 views
3

Django избегает этих символов: & < > " ', чего достаточно для вставки данных в элементы HTML. Однако, если вы хотите установить ненадежные данные в атрибутах, OWASP рекомендует избежать гораздо больше символов:Django: лишний escape-код HTML в атрибутах, как рекомендовано OWASP

буквенно-цифровых символов, за исключением, избежать всех символов с ASCII значения меньше, чем 256 с & #xHH; format (или именованный объект, если имеется ), чтобы предотвратить отключение атрибута.

Причина в том, что очень легко пропустить цитату на атрибуте и котируемые атрибуты могут быть сломаны из многих персонажей, в том числе [space] % * + , -/; <=>^and |

Есть встроенная функция или библиотека для достижения это?

P.S. Еще одно сообщение в блоге, которое стоит прочитать, объясняет, почему в некоторых контекстах требуется более широкая функция эвакуации. : http://wonko.com/post/html-escaping

ответ

2

Для этого нет встроенных функций Django. Я не знаю ни одной библиотеки.

Встроенный безопасный HTML-фильтр ускоряет как атрибут, так и неатрибутную полезную нагрузку, поэтому, возможно, потребуется дополнительная функция фильтрации только для атрибутов.

Вы можете предложить это, открыв a feature request against Django in the Django issue tracker.

Я не уверен, можно ли изменить существующий встроенный фильтр. Я бы предположил, что добавление этой функции в встроенные фильтры Django может привести к выходу многих устаревших приложений. Я не эксперт здесь, поэтому я предлагаю вам обсудить это с авторами Django. Эксплуатационный риск довольно мал, взвешен против возможной головной боли при нарушении существующих приложений Django, поэтому я не уверен, как будут получены изменения в поведении.

С другой стороны, если вам нужно запомнить, как писать фильтр для каждой переменной-атрибута, вы можете также просто закрыть кавычки. Я думаю, что этот метод более полезен в рамках, которые не обрабатывают шаблоны как обычный текст.

Между тем вы также можете попробовать monkey-patching Функции фильтра Django для выполнения дополнительного экранирования, написав собственную замену фильтра.

-1

Вы можете использовать https://pypi.python.org/pypi/bleach для того, чтобы дезинфицировать (вроде) входных данных

+0

Bleach имеет другую цель. Он используется для дезинфекции фрагментов HTML-документа. Он НЕ убежит от всех символов, рекомендованных OWASP. Это просто не устранит уязвимость XSS, говорящую выше. – Medorator

Смежные вопросы