Функция conditional_escape
Функция conditional_escape применяется к строке и возвращает
экранированную версию, если строка не помечена как безопасная.
Функция проверяет, является ли переданный объект экземпляром
SafeString или имеет атрибут __html__. Если да,
то объект возвращается без изменений. В противном случае
выполняется экранирование специальных символов HTML:
&, <, >, " и '.
Функция особенно полезна при работе с шаблонами и формировании HTML-контента, когда необходимо избежать двойного экранирования уже безопасных данных.
Синтаксис
conditional_escape(value)
Параметры
Функция принимает один обязательный параметр:
-
value- строка или объект, который требуется проверить на безопасность и при необходимости экранировать.
Возвращает экранированную строку или исходный объект, если он уже безопасен.
Пример . С обычной строкой
Рассмотрим базовый пример использования функции
conditional_escape с обычной строкой,
содержащей HTML-теги:
from django.utils.html import conditional_escape
user_input = "<script>alert('hello')</script>"
res = conditional_escape(user_input)
print(res)
Результат выполнения кода:
"<script>alert('hello')</script>"
Пример . С безопасной строкой
Если строка уже помечена как безопасная с помощью
функции mark_safe, conditional_escape
не будет её экранировать:
from django.utils.html import conditional_escape, mark_safe
safe_html = mark_safe("<strong>Hello World</strong>")
res = conditional_escape(safe_html)
print(res)
Результат выполнения кода:
"<strong>Hello World</strong>"
Пример . Использование в шаблоне
Функция часто используется при ручном формировании HTML-контента для предотвращения XSS-атак:
from django.utils.html import conditional_escape
user_name = "John & Jane"
safe_name = conditional_escape(user_name)
html_output = f"<div>Welcome, {safe_name}!</div>"
print(html_output)
Результат выполнения кода:
"<div>Welcome, John & Jane!</div>"
Пример . С числами и другими типами
Функция корректно обрабатывает не только строки, но и другие типы данных, преобразуя их в строки перед экранированием:
from django.utils.html import conditional_escape
number = 123
boolean = True
none_value = None
res1 = conditional_escape(number)
res2 = conditional_escape(boolean)
res3 = conditional_escape(none_value)
print(res1)
print(res2)
print(res3)
Результат выполнения кода:
"123"
"True"
"None"
Смотрите также
-
функция
mark_safe,
которая помечает строку как безопасную для вывода -
функция
escape,
которая всегда экранирует строку без проверки безопасности -
класс
SafeString,
который представляет безопасные строки в Django -
функция
format_html,
которая форматирует строку с автоматическим экранированием