가이드
CSV 수식 인젝션과 안전한 내보내기
CSV 인용은 필드 경계를 보존하지만 스프레드시트가 셀을 수식으로 해석하는 것까지 막지는 않습니다. 대상 앱에 맞는 내보내기 방식을 선택하고 직접 시험하세요.
어떤 형식을 선택해야 할까요?
작업 흐름에서 파일이 맡는 역할에 따라 선택하세요.
- 시스템 간 기계 처리용 CSV → 값을 보존하고 수신 측 파서 규격을 따르기
- 사용자가 스프레드시트에서 여는 CSV → 신뢰할 수 없는 값을 텍스트로 처리하는 출력을 선택하고 대상 앱에서 시험
- 인용 부호만 넣으면 충분할까? → CSV 문법 보호와 수식 실행 방지는 별개의 문제
- 어떤 처리 방식이 맞을까? → 스프레드시트마다 동작이 달라 하나의 변환이 모두에게 통한다고 가정하지 않기
CSV 셀이 수식으로 해석될 수 있습니다
웹 폼이나 데이터베이스의 값이 CSV에 포함되면 Excel, LibreOffice Calc 등의 스프레드시트가 `=` 같은 문자로 시작하는 셀을 수식으로 해석할 수 있습니다. 공격자가 입력을 제어하면 앱 동작이나 사용자 행동을 통해 정보가 노출되거나 다른 피해가 발생할 수 있습니다. 실제 영향은 프로그램과 설정에 따라 다릅니다.
CSV 인용만으로 수식 실행을 막을 수 없습니다
필드를 큰따옴표로 감싸고 내부 따옴표를 이스케이프하는 것은 쉼표나 줄바꿈을 의도한 필드 안에 유지하기 위한 문법 처리입니다. 스프레드시트가 셀을 수식으로 보는지는 별도의 해석 단계입니다. CSV 이스케이프가 올바르다는 이유만으로 수식 인젝션이 방지됐다고 볼 수 없습니다.
대상 앱에서 텍스트로 처리되는 출력을 선택하세요
먼저 자동 처리용 CSV와 사람이 스프레드시트에서 열 파일을 구분하세요. 후자라면 값을 명시적으로 텍스트로 저장할 수 있는 스프레드시트 라이브러리나 형식을 고려하세요. CSV가 꼭 필요하다면 `=`, `+`, `-`, `@` 등으로 시작하는 값을 대상 앱이 어떻게 처리하는지 시험하고 그 앱에 맞는 대책을 선택하세요. 앞에 탭이나 아포스트로피를 붙이면 호환성에 영향을 주거나 원래 값이 바뀔 수 있어 보편적인 해결책이 아닙니다.
구분자와 셀 경계도 고려하세요
신뢰할 수 없는 값에 쉼표, 세미콜론, 따옴표, 줄바꿈이 있고 출력을 잘못 만들면 의도치 않은 셀이 생길 수 있습니다. 새 셀이 수식 기호로 시작할 수도 있습니다. 표준 CSV 라이브러리로 필드를 올바르게 인코딩하고 대상 앱의 수식 해석은 별도로 다루세요. 문자열 연결이나 입력의 첫 문자 검사에만 의존하지 마세요.
열기·저장·다시 열기까지 시험하세요
지원 대상 스프레드시트에서 앞쪽 공백, 제어 문자, 구분자, 따옴표 등 대표적인 경계값을 시험하고 저장 후 다시 여는 과정도 확인하세요. OWASP는 Excel이 CSV를 저장하고 다시 열 때 인용 부호나 이스케이프를 제거해, 처리했던 값이 다시 수식으로 활성화될 수 있다고 경고합니다. 기계 처리용 원본 데이터는 스프레드시트 보기용으로 변환한 출력과 분리해 보관하세요.
고려할 형식
CSV
적합한 용도: 수신 측이 셀 내용을 데이터로 처리하는 단순 표 데이터 교환
적합하지 않은 용도: 대상 앱에 맞는 대책과 시험 없이 신뢰할 수 없는 값을 스프레드시트용으로 내보내기
내보내기 전 확인
- CSV 인용과 이스케이프는 수식 실행을 막는 보안 경계가 아닙니다.
- 스프레드시트마다 수식 감지, 경고, 재저장 동작이 다를 수 있습니다.
- 신뢰할 수 없는 입력이 포함된 CSV를 배포하기 전에 대상 앱에서 저장 후 다시 열기까지 시험하세요.