Skip to main content

CDR 무해화 요청

SHIELDEX CDR 무해화 요청을 위해 사용합니다.
비동기로 동작하며, 요청을 대기열에 삽입한 뒤, 즉시 응답합니다.
검사 결과는 별도의 상태 조회 API 또는 Callback을 통해 확인할 수 있습니다.

Important Notes

  • Protocol: HTTP Form 전송 방식(multipart/form-data)을 사용합니다.
  • Encoding: 모든 텍스트 데이터는 UTF-8로 인코딩되어야 합니다.
  • Callback: 콜백 URL은 result.callbackURL 필드에 설정하며, 무해화 완료 후 결과를 받을 수 있습니다.
  • Job ID Length: 최대 36자까지 허용되며, 초과시 유효성 검사 실패로 처리됩니다.

Method

POST

/v5/cdr
/v5/cdr/{jobID}

Request Path Parameter

KEYOBJECTDESC
jobIDString작업 ID (선택사항, 미입력 시에 시간 기반 UUID가 자동 생성됩니다. 최대 36자)

Request Parts (multipart/form-data)

KEYOBJECTDESC
dataJSON무해화 요청 데이터 (필수)
fileFile무해화 대상 파일 (필수)

Request Data JSON Structure

{
"request": {
"type": "upload"
},
"userinfo": {
"id": "string",
"department": "string",
"name": "string",
"dutyname": "string",
"sysCode": "string",
"businessCode": "string"
},
"fileinfo": {
"filename": "string"
},
"result": {
"callbackURL": "string"
}
}

Request Data Fields

KEYOBJECTREQUIREDDESC
request.typeStringYes*요청 타입 (upload 고정)
userinfo.idStringYes사용자 ID (최대 40자)
userinfo.departmentStringNo사용자 부서 (최대 256자)
userinfo.nameStringNo사용자 이름 (최대 40자)
userinfo.dutynameStringNo사용자 직책명 (최대 40자)
userinfo.sysCodeStringNo채널 코드, API 접근제어에 사용됩니다. (최대 40자)
userinfo.businessCodeStringNo업무 코드, API 접근제어에 사용됩니다. (최대 40자)
userinfo.userNumberNumberNo사용자 번호
fileinfo.filenameStringYes*파일명 (multipart 파일의 이름과 동일해야 함)
result.callbackURLStringNo콜백 URL (결과 통지용)

Response Body (json)

KEYOBJECTDESC
codeint응답 코드 (아래 테이블 참조)
msgString응답 메시지
jobIDString작업 ID (검사 결과 조회 시 사용)

Response Code

CODEMESSAGEDESC
0success무해화 요청이 정상적 접수되었습니다. 무해화 결과는 상태조회 API로 확인하세요.
1중복 무해화 요청동일 요청 발생 (jobID 중복)
2차단 메시지차단 (유효성 검사 실패, 파일 생성 실패)
3unavailable agent service무해화 서비스 연결 실패
5Sanitization Request Blocked by API Access control.API 접근제어에 의해 요청이 차단되었습니다.
-1에러 메시지서버 요청 처리 실패

Sample

REQUEST - Upload Type

curl -X POST "{{url}}/v5/cdr" \
-H "Content-Type: multipart/form-data" \
-F 'data={
"request": {
"type": "upload"
},
"userinfo": {
"id": "user001",
"name": "홍길동",
"department": "개발팀",
"dutyname": "개발자",
"sysCode": "SYS001",
"businessCode": "BIZ001"
},
"fileinfo": {
"filename": "test.pdf"
},
"result": {
"callbackURL": "https://your-callback-url.com/callback"
}
};type=application/json' \
-F "file=@/path/to/test.pdf"

RESPONSE - 무해화 요청 성공 (200 OK)

{
"code": 0,
"msg": "success",
"jobID": "test-job-001"
}

RESPONSE - 서비스 연결 실패 (200 OK)

{
"code": 3,
"msg": "unavailable agent service",
"jobID": "test-job-001"
}

RESPONSE - 필수 필드 누락 (400 BAD_REQUEST)

{
"timestamp": 1767768931518,
"status": 400,
"error": "Bad Request",
"message": "400 BAD_REQUEST \"Invalid or missing fields in JSON: 'request.type'\"",
"path": "/v5/cdr"
}

RESPONSE - 파일 필드 누락 (400 BAD_REQUEST)

{
"code": 2,
"msg": "Missing required file: 'file', The request must include a file upload in the 'file' field.",
"jobID": "test-job-001"
}

RESPONSE - Access Denied (200 OK)

{
"code": 5,
"msg": "Sanitization Request Blocked by API Access control.",
"jobID": "test-job-001"
}

Callback

요청 시 result.callbackURL 필드에 URL을 입력한 경우, 무해화 처리가 완료되면 해당 URL로 결과를 전송합니다.
상태 조회 API 또는 Callback으로 무해화 결과를 전달받을 수 있습니다

Callback API JSON

{
"jobID": "test-job-001",
"code": 0,
"msg": "success",
"logReason": 200000,
"logReasonMsg": "파일 재구성 완료"
}
{
"jobID": "test-job-001",
"code": 2,
"msg": "success",
"logReason": 220355,
"logReasonMsg": "[차단] 확장자 위변조 파일 차단"
}

Processing Flow

  • 여기서 부터는 외부에 공개하지 않아야하는, 개발 정보 입니다.