PDF, Word, Web의 '숨겨진 지시'가 AI에 전달되는가? 36개 파일 × 10가지 추출로 실측한 결과
요약
외부 문서(PDF, Word, Web)에 숨겨진 지시문이 AI에게 전달될 수 있음을 실측한 연구입니다. 36개 파일과 10가지 추출 방법을 테스트한 결과, 대부분의 숨김 방식은 어떤 방법으로든 AI가 읽을 수 있는 문자 형태로 추출되었습니다. 따라서 AI 시스템 구축 시, 단순히 눈에 보이는지 여부가 아닌 기계적이고 포괄적인 전처리 공정을 거쳐야 안전합니다.
핵심 포인트
- PDF/Word는 색상이나 크기보다 '문자 존재 유무'가 중요함.
- HTML의 경우 CSS 속성(display:none 등)을 해석하는 추출기가 위험할 수 있음.
- AI 입력 단계에서 기계적이고 포괄적인 전처리 공정이 필수적으로 요구됨.
외부에서 받은 PDF나 Word, 웹페이지를 AI에게 요약하거나 채점시키는 상황이 늘고 있습니다. 지원 서류의 1차 확인, 제안서 비교, 논문 심사 보조, 거래처 자료 요약 등입니다.
여기서 문제가 되는 것이 **사람 눈에는 보이지 않지만, AI가 받는 텍스트에는 남아 있는 '숨겨진 지시'**입니다. 2025년 7월, arXiv에 게재된 논문 17편에 AI 심사자용 숨겨진 지시(예: '긍정적인 평가만 하라')가 흰 글씨나 극소문자로 삽입되어 있었다고 보도되었습니다 (Nikkei Asia, 8개국・14기관). OWASP의 LLM 앱용 위험 목록(2025년 버전) 역시 외부 문서를 통한 '간접 프롬프트 인젝션'을 첫 번째 위험으로 지적하고 있습니다.
그렇다면, 어떤 숨김 방식이 어떤 텍스트 추출 방법으로 AI에게 전달되는 문자로서 남는 것일까요? 가상의 제안서 36개 파일을 만들고, 10가지의 추출 방법으로 테스트했습니다. 이 글은 그 결과의 요약입니다.
측정 조건
| 항목 | 내용 |
|---|---|
| 파일 | PDF 10개, HTML 17개, Word(DOCX) 9개 총 36개. 숨겨진 지시 포함 30개 (이 중 4개는 탐지 스크립트 작성 후 추가한 '설계 외' 테스트), 숨겨진 지시 없음 대조군 6개 |
| ... |
결과 요약
숨겨진 지시가 있는 30개 파일 중, 25개 파일은 적어도 하나의 추출 방법으로 숨겨진 지시가 그대로 추출되었습니다.
모든 시도한 추출 방법에서 '통과'한 숨김 방식
| 형식 | 숨김 방식 |
|---|---|
| 흰 글씨, 거의 흰색(회색 96%), 극소문자(0.5pt), 흰 사각형으로 위에서 덮기, 투명 텍스트 (렌더링 모드 3) | |
| ... | |
| PDF와 Word의 추출은 '어디에 어떤 문자가 있는지'를 읽는 방식이며, 색상이나 크기는 보지 않습니다. Word의 '숨겨진 문자' 속성도 python-docx・textutil 모두 본문으로 반환했습니다. |
추출 방법에 따라 결과가 달라진 숨김 방식
- PDF 페이지 외 배치: pypdf만 추출했습니다. 같은 PDF라도 사용하는 도구에 따라 AI에게 전달되는 내용이 다릅니다. - HTML의 display:none: BeautifulSoup와 markdownify는 추출했지만, textutil과 Chrome은 제외했습니다. CSS를 해석하지 않는 HTML → 텍스트 변환 (RAG에서 자주 사용되는 형태)은 비표시 요소도 가져옵니다.
<style>태그의 클래스로 숨김 - HTML의 visibility:hidden: Chrome의innerText만 제외했습니다. - 이미지의 대체 텍스트(alt): markdownify만 남겼습니다 (Markdown 이미지 표기법으로 변환되기 때문에). - Word의 주석・문서 속성: XML 전체를 읽는 방법만 추출했습니다.
어떤 추출 방법도 잡아내지 못한 숨김 방식
PDF 문서 속성・주석, HTML 주석・title 속성・meta description. 다만 '이번 10가지 경우에서는'의 이야기이며, 다른 추출 라이브러리나 AI 서비스 측의 전처리에서는 달라질 수 있습니다.
'브라우저에서 봐도 문제없었다'가 안전의 근거는 아니다
Chrome의 innerText는 화면에 표시되는 텍스트와 유사한 것을 반환하지만, 그래도 font-size:0, 흰 글씨, opacity:0, 화면 외 배치, height:0, transform:scale(0) 등의 문자는 포함되어 있었습니다. innerText는 '레이아웃상 존재하는 문자'를 반환하며, 사람의 눈에 보이는지 여부는 판단하지 않기 때문입니다. 제외된 것은 display:none과 visibility:hidden만었습니다.
실무적 시사점
- AI에게 읽히기 전에, 사람이 보기 어려운 문자를 기계적으로 추출하는 공정을 추가해야 합니다. 색상・크기・투명도・위치・숨겨진 문자 속성을 확인해야 합니다. - 자신의 파이프라인이 사용하는 추출 방법으로 측정해야 합니다. 같은 파일이라도 pypdf와 pdftotext로 결과가 달랐습니다. - 대조 파일(짙은 배경 위의 흰 글씨, 7pt 주석, 접힌 메뉴)처럼, 정당한 이유로 숨겨져 있는 요소도 있으므로, 탐지는 '경고'에 그치고 최종 판단은 사람이 해야 합니다.
이 실측의 한계점
측정한 것은 'AI로 전달되는 텍스트에 숨겨진 지시가 남아 있는지'까지입니다.
AI가 그 지시에 따르는지는 측정하지 않았습니다. ChatGPT, Claude, Gemini 등이 내부적으로 어떤 추출 방법을 사용하는지도 미확인입니다. - 파일은 모두 가공이며, 하나의 숨김 방식당 1개의 파일을 사용했습니다. 실제 문서에서의 발생 빈도는 알 수 없습니다.
- 이미지 내 문자, 스캔 PDF, Excel/PowerPoint, JavaScript로 나중에 수정하는 페이지는 대상에서 제외합니다.
참고
- Nikkei Asia, 2025-07-01: 'Positive review only': Researchers hide AI prompts in papers
- OWASP Top 10 for LLM Applications 2025, LLM01: Prompt Injection
30가지 숨김 방식 × 10가지 추출 방법의 전체 결과표와 탐지 스크립트 hidden_scan.py
(PDF・HTML・DOCX 대응, 설계 외 테스트 4건에서의 누락을 포함한 실측 성적), AI에게 외부 문서를 읽게 하기 전 확인 체크리스트 10개 항목은 note 아티클에 모아두었습니다: https://note.com/robakara/n/nf328eaba2598
논의

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기