bskyvision.com RSS 태그 관리 글쓰기 방명록
2022-02-06 10:40:06
@app.route("/index")
def index():
	data = "<p>안녕하세요.</p><p>반갑습니다.</p>"
	return render_template('index.html', data=data)

 

위와 같이 서버에서 html 요소를 전달한 것을 jinja2를 통해 html 문서에서 표현해야 하는 상황인 경우에는 다음과 같이 safe라는 필터를 걸어줘야 한다.

 

{{data|safe}}

 

안녕하세요.

반갑습니다.

 

safe 필터를 걸어주면 autoescape가 비활성된다. 그렇지 않고 {{data}}로 사용하면 p 태그를 인식하지 못하고 그냥 문자열로 받아들인다. 

 

{{data}}

 

<p>안녕하세요.</p><p>반갑습니다.</p>

 

주의할 것은 safe 필터는 개발자가 신뢰할 수 있는 데이터가 표출되는 곳에 대해서만 사용해야 한다는 점이다. 그렇지 않으면 XSS(cross-site scripting) 공격을 받을 수도 있다. 참고로 XSS란 웹 사이트의 입력 폼에 악성 스크립트를 삽입하여 공격하는 기법이다.

 

참고자료

[1] https://stackoverflow.com/questions/3206344/passing-html-to-template-using-flask-jinja2

글을 읽던 중에 궁금했던 부분은 질문해주세요.
제가 직접 만든 질의응답사이트인 asksim.co.kr에 질문을 남기셔도 좋습니다.
마크다운(MARKDOWN)으로 상황 설명과 함께 코드와 이미지를 남겨주시면 더욱 더 원활한 소통이 될 것입니다.
asksim에서 질문하기
비밀글
bskyvision.com. Designed by 코딩재개발.