"이스케이프"는 마크업 언어, 프로그래밍 언어 또는 스크립트 언어에서 특수한 의미를 가진 문자나 기호를 안전하게 처리할 수 있는 대체 문자열로 변환하는 프로세스를 말합니다.
예를 들어, HTML에서 < 및 > 문자는 태그를 설명하는 데 사용됩니다. 이러한 문자가 HTML에 직접 나타나면 웹 브라우저는 이를 일반 텍스트가 아닌 마크업으로 해석합니다. 따라서 이러한 기호를 일반 텍스트로 표시하려면 <(<) 및 >(>)와 같이 이스케이프 시퀀스로 작성해야 합니다. 브라우저가 이러한 이스케이프 시퀀스를 만나면 시각적으로 이를 원래 문자(< 및 >)로 렌더링합니다. 이런 변환 과정을 우리는 '탈출'이라고 부릅니다.
특히 웹 보안의 맥락에서 이스케이프는 중요합니다. 이는 웹 양식을 통해 제공된 사용자 입력을 안전하게 처리하는 것을 목표로 하는 "정화"의 필수적인 측면입니다.
예를 들어, 사용자가 양식에서 입력하는 내용을 받아서 다음 페이지에 바로 표시하는 웹 애플리케이션을 상상해 보세요. 사용자가 입력을 제출한다고 가정해 보겠습니다.
<script>alert("안녕하세요!");</script>
웹 애플리케이션이 이 문자열을 이스케이프 처리 없이 결과 페이지에 직접 포함시키면 브라우저는 이를 JavaScript 코드로 해석하여 실행합니다. 결과적으로 "안녕하세요!"라는 팝업 경고 상자가 나타났는데, 이는 웹사이트 제작자나 관리자가 의도한 바가 아니었습니다. 이 간단한 스크립트가 심각한 피해를 입히지는 않을 수 있지만, 제3자 사용자가 임의로 스크립트를 웹 페이지에 삽입할 수 있다는 것은 심각한 문제이며, 사이트를 XSS(교차 사이트 스크립팅) 공격 및 기타 보안 위협에 노출시킬 가능성이 있습니다.
이를 방지하려면 웹 애플리케이션이 해당 데이터를 표시하기 전에 특수 문자를 올바르게 이스케이프해야 합니다. < 및 >를 해당 이스케이프 시퀀스(< 및 >)로 바꾸면 악성 스크립트는 다음 문자열을 무해하게 렌더링합니다.
<스크립트>알림("안녕하세요!");</스크립트>
이 형식에서 브라우저는 이를 엄격하게 텍스트로 처리하여 모든 스크립트를 무력화하고 의도한 대로 표시하며, 의도하지 않은 동작을 유발하지 않습니다.
대부분의 최신 웹 애플리케이션 개발 언어와 프레임워크에는 문자열을 적절하게 이스케이프하기 위한 기본 제공 함수가 있습니다. 그러나 복잡한 웹 애플리케이션에서 모든 입력이 올바르게 이스케이프되었는지 확인하고, 문제가 있는 요소를 식별하여 수정하려면 상당한 시간과 노력이 필요할 수 있습니다. 이 문제를 해결하는 가장 효과적인 방법은 웹 애플리케이션 방화벽(WAF)을 사용하는 것입니다. WAF는 사용자가 제출한 입력 내용이 웹 애플리케이션에 도달하기 전에 이스케이프되도록 보장합니다.
F5는 F5 BIG-IP 솔루션으로 WAF 기능을 제공합니다.