개념 사전 · 개념

명령 실행·파서·역직렬화 경계

인터프리터 신뢰 경계 · Interpreter boundary

해석기 경계는 외부 데이터가 셸 문법·XML 해석·객체 복원 규칙으로 바뀌는 지점이다. 문자열을 안전하게 전달하는 문제와 실행할 기능·자원에 권한을 부여하는 문제를 분리한다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 문자열 연결이 명령 또는 코드가 되는 경로를 찾는다.
  • 파서의 외부 자원 기능과 입력 스키마를 제한한다.
  • 타입·범위·출력 크기·시간 예산으로 정상 기능의 실행 경계를 정한다.

02어떤 순서로 동작하나

  1. 입력 의미 제한

    사용자에게 파일 경로·명령 구문 대신 허용된 자료의 ID를 받도록 설계한다.

  2. 서버 자료로 해석

    ID를 형식·길이·권한 기준으로 검증하고 서버가 관리하는 파일 목록에서 실제 대상을 선택한다.

  3. 실행 경계 선택

    가능하면 언어의 라이브러리로 처리한다. 외부 프로그램이 필요하면 고정 실행 파일과 인자를 분리해 shell 해석을 피한다.

  4. 옵션·자원 통제

    Argument injection, PATH·환경·작업 디렉터리, timeout·출력 크기·최소권한을 별도로 제한한다.

  5. 결과와 흔적 연결

    반환 코드·파일 변화·자식 를 원래 요청과 연결하고 예상한 자료 처리만 발생했는지 확인한다.

03먼저 알아둘 용어와 구성요소

외부 값이 운영체제 명령 문법으로 해석되는 문제.
XML 외부 엔티티 해석으로 외부 자원 접근이 발생하는 문제.
저장된 표현에서 자료나 객체를 복원하는 처리.
원격 입력을 계기로 대상에서 코드가 실행되는 결과를 뜻한다.
LEARN THROUGH PRACTICE

웹의 Ping 기능을 입력·프로세스·출력으로 분해하기

입력 문자열이 셸 문법으로 해석되는 경계를 찾고 안전한 인자 전달 방식으로 바꾼다.

실습 구성과 전제

  • 격리된 교육용 Ping 폼과 폐기 가능한 만 사용한다.
  • 아래 웹 출력과 터미널 출력은 기능의 대응 관계를 비교하는 자료이며 지연 수치가 같은 연속 실행은 아니다.
  1. 웹 입력이 만드는 정상 프로세스를 추적한다

    • 폼의 주소 입력은 ping 프로그램에 전달되는 데이터여야 한다. 웹 서버가 주소를 셸 명령 문자열에 붙이면 데이터와 셸 구문이 같은 문맥에 놓인다.
    • 정상 주소 하나로 제한하고 응답에서 전송 수·수신 수·손실률을 읽는다.
    command injection · 실습·개념 참고 화면 5원본 크기로 보기 ↗
    • 웹 화면에는 Ping for FREE와 주소 입력칸이 있으며 3 packets transmitted, 3 received가 표시된다.
    • 0% packet loss는 해당 ICMP 시험 결과다. 입력 검증이나 명령 주입 방어가 구현됐다는 뜻은 아니다.
    확인 기준

    정상 기능이 실제로 어떤 실행 파일과 옵션을 사용하는지 코드에서 확인한다.

  2. 웹 결과와 프로그램 출력을 연결한다

    • 터미널 출력의 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를 가져온 후 사용하며 실제 실행은 자신의 실습 장비로 제한한다.

    command injection · 명령·상태 출력 6원본 크기로 보기 ↗
    • 터미널 명령은 ping -c 3이며 결과에 세 개의 응답과 요약 통계가 있다.
    • 웹 화면과 출력 형식은 비슷하지만 RTT 값은 다르다. 이를 동일 실행의 앞뒤 증거로 합치지 않는다.
    확인 기준

    허용 주소 형식과 프로그램 옵션을 서버가 고정하는지 본다.

  3. 실행 전 거부와 실행 실패를 나누어 시험한다

    • 주소 형식 오류는 를 만들기 전에 거부한다. 정상 주소의 응답 없음·시간 초과는 실행 단계의 실패로 구분한다.
    • 출력 길이·동시 실행 수·권한도 제한한다. 셸을 쓰지 않는 것과 서비스 자원 소진 방지는 서로 다른 조건이다.
    확인 기준

    잘못된 입력에서 가 생성되지 않고, 타임아웃 뒤 작업이 정리돼야 한다.

실습에서 확인한 동작 원리

  • 의 경계는 데이터가 셸 문법으로 넘어가는 지점이다.
  • 정상 기능의 옵션·권한·시간·출력까지 제한해야 한다.
관련 개념·전체 실습 화면 이어서 읽기 →
동작·명령 참고 문서

04예제로 따라가기

  • 스키마 조건: 교육용 요청은 quantity라는 정수 하나를 요구하고 허용 범위는 1~10이라고 가정한다. 추가 필드는 거부하는 정책이다.
  • 정상 자료: quantity=3이면 정수 타입과 범위를 모두 통과한다. 이 뒤에도 해당 작업을 요청할 권한은 따로 검사한다.
  • 문자열 자료: quantity가 문자열 "3"이면 엄격한 스키마에서는 타입 오류다. 자동 변환을 허용할지 업무 정책에서 명시하지 않고 조용히 바꾸지 않는다.
  • 범위 초과: quantity=11은 정수이지만 범위 조건에서 거부한다. 타입 검사만 통과했다고 업무 입력이 유효해지는 것은 아니다.
  • 처리 순서: 본문 크기·파싱→스키마·범위→→작업 실행 순으로 경계를 적용한다. 검증 전에 파일·를 생성하면 거부해도 부수 효과가 남는다.

05혼동하기 쉬운 점과 확인 기준

  • 하위 호출: 처음에는 shell=False여도 하위 프로그램이나 스크립트가 다시 셸 문자열을 만드는지 본다. 전체 호출 경로의 해석기를 추적한다.
  • 옵션 해석: 인수 배열은 셸 문법을 피하지만 프로그램 자체의 옵션 문법은 남는다. 파일명 자리에 옵션처럼 해석되는 값을 허용하는지 확인한다.
  • 파서 단계: XML 파싱 이후 XSLT·스키마 검증·이미지 변환 등 후속 처리에서 외부 참조가 다시 활성화되는지 확인한다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.