TL;DR
작성자는 "ignore previous instructions" 같은 명시적 문구를 찾는 phrase matching 탐지기가 문장 중간에 U+200B(Zero-Width Space)를 넣은 Prompt Injection을 놓친 사례를 공유했습니다. 화면에는 평범한 리뷰 요약 요청처럼 보이지만, 실제 문자열에는 보이지 않는 문자가 있어 필터가 다르게 처리했습니다. 이후 Zero-Width와 bidi-override 문자를 검사하도록 보완했으며, Persian·Indic 문자와 RTL 텍스트, BOM처럼 정상 입력에 필요한 경우를 예외로 처리해야 false positive를 줄일 수 있었습니다. 이 사례는 Prompt Injection 방어가 눈에 보이는 문구뿐 아니라 Unicode 제어 문자까지 입력 단계에서 검사해야 한다는 점을 보여줍니다.
실용적 조언
- Prompt Injection 필터에 단순한 phrase matching만 적용하지 말고 입력 문자열에서 Zero-Width Space와 bidi-override 문자를 별도로 검사해야 합니다. 검사 결과를 화면에 표시되는 텍스트가 아니라 Unicode 코드 단위의 실제 문자열에 적용해야 U+200B 삽입을 놓치지 않습니다. Persian·Indic 스크립트, RTL 텍스트, BOM처럼 정상 입력에서 발생하는 경우를 구분하는 예외 규칙도 함께 마련해야 합니다.
섹션별 상세
이미지 분석

스크린샷은 시각적으로 평범한 리뷰 요약 요청이지만, 텍스트 내부에 사람이 볼 수 없는 문자가 포함되어 필터에 의해 차단된 사례를 나타냅니다. 게시글의 핵심은 화면에 드러난 문장과 실제 Unicode 문자열이 다를 수 있으며, 이 차이가 단순 phrase matching 기반 Prompt Injection 탐지의 빈틈을 만든다는 점입니다.
겉으로는 리뷰 요약 요청처럼 보이는 프롬프트 화면입니다.
용어 해설
- 제로 너비 공백(Zero-Width Space)
- — 화면에 폭을 차지하지 않아 사람에게는 보이지 않는 Unicode 문자입니다. 문장 중간에 삽입해도 일반 텍스트처럼 보이지만, 단순한 구문 일치 필터는 단어가 끊긴 것으로 인식해 탐지를 놓칠 수 있습니다.
- 양방향 텍스트 재정의 문자(Bidi Override Characters)
- — 문자열의 표시 방향이나 문자 순서를 바꾸는 Unicode 제어 문자입니다. 원문에 드러난 단어 순서와 실제 처리되는 문자열 사이에 차이를 만들 수 있어 Prompt Injection 탐지에서 별도로 확인해야 하는 입력 요소입니다.
- 유니코드(Unicode)
- — 문자와 기호를 일관된 코드 값으로 표현하는 문자 인코딩 표준입니다. Zero-Width Space나 양방향 텍스트 제어 문자처럼 시각적으로 드러나지 않는 값도 포함하므로, 텍스트 필터가 화면이 아닌 코드 단위 입력을 검사하게 만드는 배경이 됩니다.
- 바이트 순서 표시(BOM)
- — 텍스트 파일의 인코딩과 바이트 순서를 나타내기 위해 파일 앞에 붙는 특수 문자입니다. 일부 파일을 복사하거나 붙여넣는 과정에서 함께 들어올 수 있어, 보이지 않는 문자를 일괄 차단할 때 정상 입력으로 허용할 예외에 포함될 수 있습니다.
- 프롬프트 인젝션(Prompt Injection)
- — 모델에게 전달되는 입력에 지시문을 섞어 기존 지침의 우선순위를 바꾸거나 원래 의도와 다른 동작을 유도하는 공격 방식입니다. 이 글에서는 눈에 보이는 우회 문구뿐 아니라 숨은 Unicode 문자를 이용해 탐지 단계 자체를 피하는 변형이 문제로 다뤄집니다.
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.