명령 실행·파서·역직렬화 경계
인터프리터 신뢰 경계 · Interpreter boundary
해석기 경계는 외부 데이터가 셸 문법·XML 해석·객체 복원 규칙으로 바뀌는 지점이다. 문자열을 안전하게 전달하는 문제와 실행할 기능·자원에 권한을 부여하는 문제를 분리한다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 문자열 연결이 명령 또는 코드가 되는 경로를 찾는다.
- 파서의 외부 자원 기능과 입력 스키마를 제한한다.
- 타입·범위·출력 크기·시간 예산으로 정상 기능의 실행 경계를 정한다.
02어떤 순서로 동작하나
- 입력 의미 제한
사용자에게 파일 경로·명령 구문 대신 허용된 자료의 ID를 받도록 설계한다.
- 서버 자료로 해석
ID를 형식·길이·권한 기준으로 검증하고 서버가 관리하는 파일 목록에서 실제 대상을 선택한다.
- 실행 경계 선택
가능하면 언어의 라이브러리로 처리한다. 외부 프로그램이 필요하면 고정 실행 파일과 인자를 분리해 shell 해석을 피한다.
- 옵션·자원 통제
Argument injection, PATH·환경·작업 디렉터리, timeout·출력 크기·최소권한을 별도로 제한한다.
- 결과와 흔적 연결
반환 코드·파일 변화·자식 를 원래 요청과 연결하고 예상한 자료 처리만 발생했는지 확인한다.
03먼저 알아둘 용어와 구성요소
- 외부 값이 운영체제 명령 문법으로 해석되는 문제.
- XML 외부 엔티티 해석으로 외부 자원 접근이 발생하는 문제.
- 저장된 표현에서 자료나 객체를 복원하는 처리.
- 원격 입력을 계기로 대상에서 코드가 실행되는 결과를 뜻한다.
웹의 Ping 기능을 입력·프로세스·출력으로 분해하기
입력 문자열이 셸 문법으로 해석되는 경계를 찾고 안전한 인자 전달 방식으로 바꾼다.
실습 구성과 전제
- 격리된 교육용 Ping 폼과 폐기 가능한 만 사용한다.
- 아래 웹 출력과 터미널 출력은 기능의 대응 관계를 비교하는 자료이며 지연 수치가 같은 연속 실행은 아니다.
웹 입력이 만드는 정상 프로세스를 추적한다
- 폼의 주소 입력은 ping 프로그램에 전달되는 데이터여야 한다. 웹 서버가 주소를 셸 명령 문자열에 붙이면 데이터와 셸 구문이 같은 문맥에 놓인다.
- 정상 주소 하나로 제한하고 응답에서 전송 수·수신 수·손실률을 읽는다.
원본 크기로 보기 ↗- 웹 화면에는 Ping for FREE와 주소 입력칸이 있으며 3 packets transmitted, 3 received가 표시된다.
- 0% packet loss는 해당 ICMP 시험 결과다. 입력 검증이나 명령 주입 방어가 구현됐다는 뜻은 아니다.
확인 기준정상 기능이 실제로 어떤 실행 파일과 옵션을 사용하는지 코드에서 확인한다.
웹 결과와 프로그램 출력을 연결한다
- 터미널 출력의 ping -c 3은 세 번의 요청 횟수를 지정한다. 웹이 이 출력을 그대로 반환한다면 서버 명령 결과가 응답 경로에 들어간 것이다.
- 서버가 받은 입력을 안전한 인자 배열로 전달해도 실행 파일·옵션·시간 제한을 별도로 통제해야 한다.
address = str(ipaddress.ip_address(user_input)) result = subprocess.run(['ping', '-c', '3', address], shell=False, capture_output=True, text=True, timeout=5)전용 비교 예시. ipaddress와 subprocess를 가져온 후 사용하며 실제 실행은 자신의 실습 장비로 제한한다.
원본 크기로 보기 ↗- 터미널 명령은 ping -c 3이며 결과에 세 개의 응답과 요약 통계가 있다.
- 웹 화면과 출력 형식은 비슷하지만 RTT 값은 다르다. 이를 동일 실행의 앞뒤 증거로 합치지 않는다.
확인 기준허용 주소 형식과 프로그램 옵션을 서버가 고정하는지 본다.
실행 전 거부와 실행 실패를 나누어 시험한다
- 주소 형식 오류는 를 만들기 전에 거부한다. 정상 주소의 응답 없음·시간 초과는 실행 단계의 실패로 구분한다.
- 출력 길이·동시 실행 수·권한도 제한한다. 셸을 쓰지 않는 것과 서비스 자원 소진 방지는 서로 다른 조건이다.
확인 기준잘못된 입력에서 가 생성되지 않고, 타임아웃 뒤 작업이 정리돼야 한다.
실습에서 확인한 동작 원리
- 의 경계는 데이터가 셸 문법으로 넘어가는 지점이다.
- 정상 기능의 옵션·권한·시간·출력까지 제한해야 한다.
04예제로 따라가기
- 스키마 조건: 교육용 요청은 quantity라는 정수 하나를 요구하고 허용 범위는 1~10이라고 가정한다. 추가 필드는 거부하는 정책이다.
- 정상 자료: quantity=3이면 정수 타입과 범위를 모두 통과한다. 이 뒤에도 해당 작업을 요청할 권한은 따로 검사한다.
- 문자열 자료: quantity가 문자열 "3"이면 엄격한 스키마에서는 타입 오류다. 자동 변환을 허용할지 업무 정책에서 명시하지 않고 조용히 바꾸지 않는다.
- 범위 초과: quantity=11은 정수이지만 범위 조건에서 거부한다. 타입 검사만 통과했다고 업무 입력이 유효해지는 것은 아니다.
- 처리 순서: 본문 크기·파싱→스키마·범위→→작업 실행 순으로 경계를 적용한다. 검증 전에 파일·를 생성하면 거부해도 부수 효과가 남는다.
05혼동하기 쉬운 점과 확인 기준
- 하위 호출: 처음에는 shell=False여도 하위 프로그램이나 스크립트가 다시 셸 문자열을 만드는지 본다. 전체 호출 경로의 해석기를 추적한다.
- 옵션 해석: 인수 배열은 셸 문법을 피하지만 프로그램 자체의 옵션 문법은 남는다. 파일명 자리에 옵션처럼 해석되는 값을 허용하는지 확인한다.
- 파서 단계: XML 파싱 이후 XSLT·스키마 검증·이미지 변환 등 후속 처리에서 외부 참조가 다시 활성화되는지 확인한다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.