Web API

Web API를 이용해 업로드하기

문제를 업로드 하기 위해서는 다음과 같은 정보를 입력해야 합니다.

  • 문제 제목
    • 문제를 대표하는 제목입니다.
    • 정해진 서식이 없으며 자유롭게 설정할 수 있습니다.
  • 설명
    • 문제에 대한 설명입니다. Markdown 포맷으로 작성합니다.
    • 문제에 대한 정보나 문제를 해결하기 위해 필요한 단서를 기술하는 등의 문제와 관련된 내용을 적을 수 있습니다.
  • 플래그
    • 문제를 해결한 뒤 획득 할 수 있는 Flag입니다.
    • 정해진 형식은 없지만 유추하기 어렵게 작성하는 것이 이상적입니다.
  • 태그
    • 문제에 해당하는 분야를 태그합니다. 모든 문제는 하나 이상의 태그가 지정되어야 합니다.
    • 다음과 같은 태그들을 사용할 수 있으며, 이외에도 적절한 태그를 사용할 수 있습니다.
      • pwnable
      • reversing
      • web
      • crypto
      • forensics
      • cloud
      • misc

VM 설정

VM 설정

만약 문제를 해결하기 위해 별도의 서버를 필요로 하는 경우 VM 사용하기를 통해 VM을 추가할 수 있으며 세부 사항을 설정 할 수 있습니다.

  • 운영체제
    • VM에서 사용하는 운영체제의 종류를 지정합니다.
    • 다음과 같은 운영체제를 사용할 수 있습니다.
      • Linux
  • VM 메모리
    • VM 인스턴스가 사용하는 최대 메모리 크기를 지정합니다.
  • VM 디스크 크기
    • VM 인스턴스가 사용하는 최대 디스크 크기를 지정합니다.
  • VM Expose 포트
    • 외부에서 VM으로 접근할 수 있는 포트를 지정합니다.
    • comma(,)로 구분된 [port]/[protocol] 형태의 쌍 목록을 사용하여야 합니다.
      • protocol로는 tcpudp를 사용할 수 있습니다.
    • 지정하지 않을 경우 어떤 포트도 개방하지 않습니다.

필요한 메모리 및 디스크 크기는 실제로 Docker를 사용해 image를 생성하고 container를 실행하는 것으로 필요한 크기를 확인할 수 있습니다.
Image의 크기는 docker image 명령어를, 메모리의 크기는 docker stats 명령어를 통해 확인할 수 있습니다.

필요한 공간의 최소화를 위해 Base image는 slim 혹은 alpine 버전을 사용하는 것을 권장합니다. 빌드하는 시간을 단축시킬 수 있으며, 디스크 크기 문제로 인한 에러를 크게 줄일 수 있습니다.

파일 업로드

파일 업로드

폴더를 업로드 할 때는 다음과 같은 조건을 만족해야 합니다.

  • 반드시 public/ 폴더를 포함해야 합니다.
    • 이 폴더는 문제를 푸는데 필요한 파일들을 포함하는 폴더입니다.
    • 이 폴더의 파일들은 문제에 접근하는 모든 사용자가 자유롭게 다운로드할 수 있습니다.
  • Git을 통한 업로드에 필요한 Specfile, Description.md 등의 파일은 필요하지 않습니다.
  • VM을 필요로 하는 경우 Dockerfile 이 최상위 경로에 존재해야 합니다.
    • Docker 컨테이너를 만들기 위한 설정을 기술한 파일입니다.
    • 자세한 내용은 Dockerfile Reference를 참조해 주세요.

웹사이트를 통해 문제를 업로드 한 경우 upload-1 과 같은 태그가 자동으로 부여됩니다.

다음 예제 파일들을 이용해 필요한 파일 구조를 확인할 수 있습니다.

VM이 필요하지 않은 문제 예제 파일
VM이 필요한 문제 예제 파일

문제 테스트, 배포