• 회원가입
  • 로그인
  • 구글아이디로 로그인

[template] Jinja - 템플릿 - HTML 회피 (Template - HTML Escaping) ※ e필터 = 이필터

목차
  1. 수동 회피처리 (Manual Escaping)
  2. 자동 회피처리 (Automatic Escaping)

 

템플릿에서 HTML을 생성할 때는 변수가 결과 HTML에 영향을 주는 문자를 포함할 수 있다는 위험이 항상 있음. 두 가지 접근 방법이 있음:

  • 각 변수를 수동으로 회피처리.
  • 기본적으로 모든 것을 자동으로 회피처리.


Jinja는 두 가지 모두를 지원함. 사용되는 것은 애플리케이션 설정에 따라 달라짐. 기본구성은 자동 회피처리 없음. (아래 여러 이유 때문에.)

  • 안전한 값 이외의 모든 것을 회피처리 시, Jinja가 HTML을 포함하지 않는 변수(예: 숫자, 부울)도 회피처리해 성능에 큰 영향 미칠 수 있음.
  • 변수의 안전성에 대한 정보는 매우 취약함. 안전한 값과 안전하지 않은 값을 강제 형변환하면 반환 값이 이중으로 회피처리 된 HTML이 될 수 있음.

 

수동 회피처리 (Manual Escaping)

 

  • 수동 이스케이핑 활성화 시, 변수 회피처리 하는 것은 사용자 몫임.
  • (>, <, &, ") 문자 중 하나라도 포함된 변수 존재 시, 해당 변수가 올바른 형식의 신뢰 가능한 HTML을 포함 안 하면 반드시 해당 변수를 회피처리 해야 함.
  • 변수를 수동 회피처리 하려면, 해당 변수 뒤에 |e 필터 추가. (예)  {{ user.username|e }}

 

 

자동 회피처리 (Automatic Escaping)

 

1.

자동 회피처리 활성화 된 경우, 모든 것이 기본적으로 이스케이핑되지만 명시적으로 안전한 것으로 표시된 값은 예외임. 변수와 표현식은 다음 중 하나에서 안전한 것으로 표시할 수 있음:

  • 애플리케이션에서 markupsafe.Markup 사용해 컨텍스트 사전에 표시.
  • 템플릿에서 |safe 필터를 사용.

 

2.

safe 표시된 문자열이 해당 표시를 이해 못하는 다른 Python 코드 통과 시 그 표시가 사라질 수 있음. 데이터가 언제 안전하게 표시되었는지와 템플릿에 도달하기 전에 어떻게 처리되었는지 확인 필요함.

 

3.

변수가 회피처리 되었으나 safe로 표시 안 되면 자동 회피처리가 여전히 진행되어 이중 회피처리 된 문자가 발생함. 이미 안전한 데이터이나 safe 표시 안 된 경우, 반드시 Markup으로 래핑하거나 |safe 필터를 사용해야 함.

 

4.

Jinja 함수(macros, super, self.BLOCKNAME)들은 항상 safe 표시된 템플릿 데이터를 반환함.

 

5.

자동 회피처리 있는 템플릿의 문자열 리터럴은 unsafe로 간주됨. (왜냐하면 고유 Python 문자열이 safe 하지 않기 때문임.) 

 

공식 매뉴얼: https://jinja.palletsprojects.com/en/3.1.x/templates/#working-with-automatic-escaping

방문 감사합니다. (즐겨찾기 등록: Ctrl + D)

분류 제목
sandbox Jinja - 샌드박스 - 보안 고려 사항 (Sandbox - Security Considerations)
sandbox Jinja - 샌드박스 - API (Sandbox - API)
sandbox Jinja - 샌드박스 - 연산자 가로채기 (Sandbox - Operator Intercepting)
python_types Jinja - 고유 파이썬 타입 - 예제들 (Native Python Types - Examples)
python_types Jinja - 고유 파이썬 타입 - API (Native Python Types - API)
template Jinja - 템플릿 - 개요 / 템플릿파일확장자 (Template - Synopsis / Template …
template Jinja - 템플릿 - 변수 (Template - Variables)
template Jinja - 템플릿 - 필터 (Template - Filters)
template Jinja - 템플릿 - 테스트 (Template - Tests)
template Jinja - 템플릿 - 주석 (Template - Comments)
template Jinja - 템플릿 - 공백 제어 ★ (Template - Whitespace Control)
template Jinja - 템플릿 - 회피처리 (Template - Escaping) ※ 진자 템플릿 코드를 문자 그대로…
template Jinja - 템플릿 - 라인 구문 (Template - Line Statements) ※ 약식 코드
template Jinja - 템플릿 - 템플릿 상속 ★★★ (Template - Template Inheritance)
template Jinja - 템플릿 - HTML 회피 (Template - HTML Escaping) ※ e필터 = 이필터
template Jinja - 템플릿 - 제어 구조 목록 ★★★ (Template - List of Control Struc…
template Jinja - 템플릿 - 컨텍스트 동작 가져오기 (Template - Import Context Behavi…
template Jinja - 템플릿 - 표현식 ★ (Template - Expressions) ※ (자료형/연산자/기호/키…
template Jinja - 템플릿 - 내장필터 목록 (Template - List of Builtin Filters)
template Jinja - 템플릿 - 내장테스트 목록 (Template - List of Builtin Tests)
2/9
목록
찾아주셔서 감사합니다. Since 2012