소개
Flask 에서 HTML 을 반환할 때 (Flask 의 기본 응답 유형), 출력에 렌더링된 사용자가 제공한 모든 값은 주입 공격으로부터 보호하기 위해 이스케이프 처리되어야 합니다. 이 랩에서는 이를 달성하기 위해 escape를 사용하는 방법을 배우게 됩니다. 또한, 나중에 소개될 Jinja 로 렌더링된 HTML 템플릿은 이를 자동으로 수행합니다. 현재로서는 수동으로 escape를 사용하여 이 작업을 수행할 수 있습니다.
Escape (이스케이프)
이 단계에서는 주입 공격으로부터 보호하기 위해 escape를 사용하는 방법을 배우게 됩니다.
html_escaping.py파일을 열고 먼저Flask클래스와escape를 import 합니다.
from flask import Flask
from markupsafe import escape
- 다음으로
Flask클래스의 인스턴스를 생성합니다.
app = Flask(__name__)
- 그런 다음
route()데코레이터를 사용하여/경로를escaping이라는 뷰 함수와 함께 생성합니다. 이 함수 내에서 JavaScript 코드 조각을 정의하고escape를 사용하여 텍스트로 렌더링하고, HTML 에서 특별한 의미를 갖는 모든 문자를 이스케이프 처리합니다.
@app.route('/')
def escaping():
input = "<script>alert('XSS attack');</script>"
escaped_input = escape(input)
return f"User input: {escaped_input}"
- 디버그 모드를 활성화하여 포트 5000 에서 Flask 애플리케이션을 시작하기 위한 스크립트의
main진입점을 생성합니다.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
- 애플리케이션을 실행하려면 먼저 다음 명령을 사용하여 터미널에서 Flask 애플리케이션을 실행합니다.
python3 html_escaping.py
그런 다음 인터페이스 상단에 있는 "Web 5000" 탭을 열고 페이지를 새로 고치면 다음 메시지가 표시됩니다.

<script>태그는 JavaScript 로 실행되지 않고 텍스트로 안전하게 표시되어 XSS 공격 방지를 보여줍니다.
요약
이 랩에서는 입력을 수동으로 이스케이프 처리하기 위해 escape를 사용하는 방법을 배웠습니다. 이는 잠재적으로 유해한 공격을 처리할 때 매우 유용할 수 있습니다. 나중에 Jinja 로 템플릿을 렌더링하는 방법을 배우게 되는데, 이는 이 작업을 자동으로 효율적으로 수행할 수 있습니다.



