Home » 레퍼런스 » PYTHON » python html escape string 하는 방법을 알아봅시다.

python html escape string 하는 방법을 알아봅시다.

사용자의 입력을 믿지 말아야 한다. 이것은 정말 중요합니다. html을 사용자의 입력으로부터 build 하는 것도 마찬가지입니다. 위험한 문자들은 적절하게 escaping을 시켜 주어야 합니다. 그것을 도와주는 것이 python html escape 함수입니다.


[그림 1] python html escape 함수 설명

먼저 인자들은 아래와 같습니다.

  • s
    • 문자열을 의미합니다.
  • quote
    • default 값은 true 입니다.
    • “와 ‘를 escape 시킬 것인지 여부를 나타냅니다.

이 함수가 왜 필요한지 간단한 예제를 보면서 알아보겠습니다.


믿지 못하는 입력

사용자로부터 받는 입력은 믿으면 안 됩니다.

[그림 2] 예제 1번 프로그램

예제 1번 프로그램을 보겠습니다. html 파일을 build 하는 프로그램입니다. Hello html에 입력 받은 문자열을 끼워 넣는 형식임을 알 수 있습니다. 대부분의 경우는 별 문제가 안 됩니다.

[그림 3] alert를 끼워넣은 모습

그런데, script 태그와 alert 문을 입력받으면 어떻게 될까요? 위 스크립트는 Hello 라는 메세지를 띄우는 스크립트입니다.

[그림 4] 예제 1번 프로그램 실행 결과

hello! 가 띄워졌습니다. 여기서 문제는 <와 >, “와 같은 것들이 escape가 되지 않았다는 것입니다. 그랬기 때문에 그대로 script가 해석되었고, hello 라는 메세지가 뜬 것입니다. 왜 이런 상황이 발생했을까요? 사용자의 입력을 믿었기 때문입니다.

어떻게 해결하면 될까요? escape를 하면 됩니다.

[그림 5] 예제 2번 프로그램

5번째 줄은, html의 escape를 이용해서 위험 문자들을 적절히 다른 것으로 치환 하는 것입니다.

[그림 6] 예제 2번 프로그램의 결과

아까와 마찬가지로 <script> alert(“hello”) </script> 라는 문자열을 입력했습니다. 그렇지만, 아무런 alert 메세지가 뜨지 않았습니다. 이는, 몇 개의 위험 문자들이 escape 되었기 때문입니다.


html의 escape

이 함수의 내부를 보겠습니다.

[그림 7] 함수의 로직

기본적으로 이 함수는 &와 <, >를 escape 합니다. 각각 &amp, &lt, &gt로요. 만약에 quote가 있으면 추가로 “와 ‘도 같이 escape 합니다. 기본적으로 quote는 True이기 때문에, 5개의 문자가 escape 됩니다.

그러면 위 프로그램의 결과는 어떻게 나올까요? escape의 quote에 아무 것도 주지 않았으므로, ‘와 “, <, >, &가 모두 escape 된 결과가 나오게 됩니다.

프로그램의 실행 결과는 위와 같습니다.

반면, quote를 False로 두면 어떤 결과가 나올까요? “와 ‘가 escape가 되지 않습니다.

실행 결과를 보면 ‘와 “는 그대로 나오고, <, >, &가 각각 &lt, &gt, &amp로 나왔음을 볼 수 있습니다. 정리하면, 5개의 문자 “, ‘, <, >, &를 escape를 하려면 python html의 escape를 사용하면 된다는 것입니다.

Leave a Comment

18 + 6 =