Jinja autoescape 비활성화

Jinja auto-escape is disabled

설명

Jinja 템플릿 엔진에서 자동 이스케이프가 비활성화되어 있으면, 사용자 입력값이 HTML로 출력될 때 적절히 인코딩되지 않아 XSS(크로스 사이트 스크립팅) 공격에 취약해질 수 있습니다. 자동 이스케이프는 HTML 콘텐츠에서 사용자 입력값을 안전하게 처리하기 위해 필수적입니다.

잠재적 영향

  • XSS (크로스 사이트 스크립팅): 공격자가 악성 스크립트를 삽입하여 다른 사용자의 브라우저에서 실행할 수 있습니다. 이를 악용한 계정 탈취가 발생할 수도 있습니다.
  • 피싱 공격: 사용자에게 악성 링크나 가짜 로그인 페이지를 제공하여 정보를 탈취할 수 있습니다.
  • 데이터 탈취: 공격자가 사용자의 민감한 데이터를 탈취할 수 있습니다.

해결 방법

  • 자동 이스케이프 활성화: Jinja 템플릿 엔진의 autoescape 옵션을 활성화합니다.
  • HTML 이스케이프가 URL 스킴 검증이나 JavaScript 문맥의 처리를 대신하지는 않습니다. 템플릿 소스는 신뢰할 수 있어야 하며, 사용자 입력에 safe를 적용하여 보호를 해제하지 마세요.

예시

변경 전

python
# Unsafe Jinja2 code
from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('template.html')
html_content = template.render(user_input=user_input)

변경 후

python
# Safe Jinja2 code
from jinja2 import Environment, FileSystemLoader, select_autoescape

env = Environment(
    loader=FileSystemLoader('templates'),
    autoescape=True
    # 또는 `autoescape=select_autoescape(['html', 'xml'])`를 사용하여 원하는 파일 확장자에 적용
)
template = env.get_template('template.html')
html_content = template.render(user_input=user_input)

설명:

  • 변경 전: 자동 이스케이프가 비활성화된 상태에서 사용자 입력값을 HTML에 출력하여, 악성 스크립트가 실행될 수 있습니다.
  • 변경 후: autoescape 옵션을 활성화하여, HTML 콘텐츠에서 사용자 입력값이 안전하게 처리되도록 합니다.
    • select_autoescape을 사용하여 원하는 파일 확장자 대상으로 적용할 수 있습니다.

참조