--- title: "getReport" slug: "security-websecuritychecker-getreport" tags: ["Web Security Checker"] updated: 2026-09-17T09:16:56Z published: 2026-09-17T09:16:56Z canonical: "api.ncloud-docs.com/security-websecuritychecker-getreport" --- > ## Documentation Index > Fetch the complete documentation index at: https://api.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # getReport Classic/VPC 환경에서 이용 가능합니다. 진단 작업이 완료된 진단의 리포트를 출력합니다. ## 요청 요청 형식을 설명합니다. 요청 형식은 다음과 같습니다. | 메서드 | URI | | --- | --- | | GET | /api/v1/jobs/{instanceId}/report | ### 요청 헤더 Web Security Checker에서 공통으로 사용하는 헤더에 대한 정보는 [Web Security Checker 요청 헤더](/docs/security-websecuritychecker#%EC%9A%94%EC%B2%AD%ED%97%A4%EB%8D%94)를 참조해 주십시오. ### 요청 경로 파라미터 요청 경로 파라미터에 대한 설명은 다음과 같습니다. | 필드 | 타입 | 필수 여부 | 설명 | | --- | --- | --- | --- | | InstanceId | Integer | Required | 진단 식별 번호 - [getJobs](/docs/security-websecuritychecker-getjobs) 또는 [searchJobs](/docs/security-websecuritychecker-searchjobs) 참조 | ### 요청 예시 요청 예시는 다음과 같습니다. ``` curl --location --request GET 'https://wsc.apigw.ntruss.com/api/v1/jobs/{instanceId}/report' \ --header 'x-ncp-apigw-timestamp: {Timestamp}' \ --header 'x-ncp-iam-access-key: {Access Key}' \ --header 'x-ncp-apigw-signature-v2: {API Gateway Signature}' \ --header 'Content-Type: application/json' ``` ## 응답 응답 형식을 설명합니다. ### 응답 바디 응답 바디에 대한 설명은 다음과 같습니다. | 필드 | 타입 | 필수 여부 | 설명 | | --- | --- | --- | --- | | `report_date` | String | - | 진단 완료 시간 | | `Target_Info` | String | - | 진단 대상 정보 | | `Crawl_Time` | String | - | 크롤링 작업 시간 (YYYY/MM/DD hh:mm:ss~YYYY/MM/DD hh:mm:ss) | | `Scan_Time` | String | - | 진단 작업 시간 (YYYY/MM/DD hh:mm:ss~YYYY/MM/DD hh:mm:ss) | | `Excluded_Url` | String | - | 진단 제외 대상 URL 리스트 | | `Login_Info` | String | - | 인증 쿠키 정보 | | `Vulnerability_Category` | String | - | 진단 항목 나열 (VulnTitle_1, VulnTitle_2, ...) | | `User_Agent` | String | - | 진단/크롤러 브라우저 설정 | | `Memo` | String | - | 진단 작업 생성 시 작성한 메모 | | `Scanned_Domain_List` | Array | - | 진단 대상 도메인 리스트 | | `Not_Scanned_Domain_List` | Array | - | 진단 제외 도메인 리스트 | | `Classify_byRisk_Level` | Object | - | 위험도에 따른 취약점 개수 | | `Classify_byRisk_Level.Total` | Integer | - | 총 취약점 개수 | | `Classify_byRisk_Level.High` | Integer | - | 영향도 '상' 취약점 개수 | | `Classify_byRisk_Level.Medium` | Integer | - | 영향도 '중' 취약점 개수 | | `Classify_byRisk_Level.Low` | Integer | - | 영향도 '하' 취약점 개수 | | `Classify_byRisk_Domain` | Object | - | 도메인, 영향도별 취약점 개수 | | `Classify_byRisk_Domain."http://your-domain"` | Object | - | `http://your-domain`의 위험도별 취약점 개수 | | `Classify_byRisk_Domain."http://your-domain"."VulnTitle_1"` | Object | - | `http://your-domain`의 "VulnTitle_1" 진단 항목의 위험도별 취약점 개수 | | `Classify_byRisk_Domain."http://your-domain"."VulnTitle_1".High` | Integer | - | `http://your-domain`의 "VulnTitle_1" 진단 항목의 영향도 '상' 취약점 개수 | | `Classify_byRisk_Domain."http://your-domain"."VulnTitle_1".Medium` | Integer | - | `http://your-domain`의 "VulnTitle_1" 진단 항목의 영향도 '중' 취약점 개수 | | `Classify_byRisk_Domain."http://your-domain"."VulnTitle_1".Low` | Integer | - | `http://your-domain`의 "VulnTitle_1" 진단 항목의 영향도 '하' 취약점 개수 | | `Classify_byRisk_Vulnerability` | Object | - | 취약점별 취약점 개수 | | `Classify_byRisk_Vulnerability."VulnTitle_1"` | Integer | - | "VulnTitle_1" 진단 항목의 취약점 개수 | | `Classify_byRisk_Vulnerability."VulnTitle_2"` | Integer | - | "VulnTitle_2" 진단 항목의 취약점 개수 | | `Details` | Object | - | 진단 항목별 상세 정보 | | `Details."VulnTitle_1"` | Object | - | "VulnTitle_1" 진단 항목의 취약점 상세 정보 | | `Details."VulnTitle_1".RiskLevel` | Object | - | "VulnTitle_1" 진단 시 발견된 취약점의 영향도 - `Low` \| `Medium` \| `High` | | `Details."VulnTitle_1".Vuln_Desc` | Object | - | "VulnTitle_1" 진단 시 발견된 취약점 설명 - 취약점 종류에 따라 설명이 다를 수 있음 | | `Details."VulnTitle_1".Vuln_Desc2` | Object | - | "VulnTitle_1" 진단 시 발견된 취약점 설명 - 취약점 종류에 따라 설명이 다를 수 있음 | | `Details."VulnTitle_1"."0"` | Object | - | "VulnTitle_1" 진단 항목의 첫 번째 취약점 상세 정보 | | `Details."VulnTitle_1"."0".Title` | Object | - | 취약점 이름 + 순번 | | `Details."VulnTitle_1"."0".vuln_key` | String | - | 취약점을 구분하는 고유키 - 형식: 키 양식 또는 도메인_취약점명_순번 - <예시> `"http://example.com_LFI_0"` | | `Details."VulnTitle_1"."0".URL` | Object | - | 취약점 발생 경로(웹 URL) 및 메서드 | | `Details."VulnTitle_1"."0".Request_Header` | Object | - | 취약점 진단 시 사용한 요청 헤더(Request Header) 정보 | | `Details."VulnTitle_1"."0".Referer` | Object | - | 요청 헤더(Request Header) 정보 중 이전 참조 경로(URL, 레퍼러) | | `Details."VulnTitle_1"."0".Request_Body` | Object | - | FORM 데이터, JSON 데이터 등 요청 바디 영역 | | `Details."VulnTitle_1"."0".newline` | Boolean | - | 응답 데이터 필드 리스트를 개행 여부 표시 - `true` \| `false` - `true`: 개행 - `false`: 개행 안 함 | | `Details."VulnTitle_1"."0".VulnParam` | String | - | 취약한 URL 쿼리 스트링 또는 POST 데이터의 파라미터 이름 | | `Details."VulnTitle_1"."0".VulnSTR` | String | - | 취약점 점검 모듈이 삽입한 페이로드 | | `Details."VulnTitle_1"."0".Response_Data` | Array | - | 응답 바디 데이터 리스트 | | `Details."VulnTitle_1"."0".Description` | String | - | 취약점 공격 방법에 대한 추가 설명 | | `Details."VulnTitle_1"."0".Reference` | String | - | 대응 방안 외부 안내 문서 링크 | | `Recommendation` | Object | - | 취약점 대응 방안 상세 | | `Recommendation."VulnTitle_1"` | String | - | "VulnTitle_1" 진단 항목의 취약점 대응 방안 상세 | | `Recommendation."VulnTitle_2"` | String | - | "VulnTitle_2" 진단 항목의 취약점 대응 방안 상세 | ### 응답 상태 코드 Web Security Checker API에서 공통으로 사용하는 응답 상태 코드에 대한 정보는 [Web Security Checker 응답 상태 코드](/docs/security-websecuritychecker#%EC%9D%91%EB%8B%B5%EC%83%81%ED%83%9C%EC%BD%94%EB%93%9C)를 참조해 주십시오. ### 응답 예시 응답 예시는 다음과 같습니다. - 진단 리포트 출력 완료 ``` { "returnCode": "0", "returnDesc": "Request Success", "returnMessage": "Success", "resource": { "report_date": "2024-07-08 13:15:10", "Target_Info": "http://your-domain", "Crawl_Time": "2024/07/08 13:12:03~2024/07/08 13:12:08", "Scan_Time": "2024/07/08 13:12:27~2024/07/08 13:15:10", "Excluded_Url": [], "Login_Info": "", "Vulnerability_Category": "SQL Injection, XSS, .... (중략)", "User_Agent": "Mozilla/5.0 .... (중략)", "Memo": "샘플", "Scanned_Domain_List": [ "http://your-domain" ], "Not_Scanned_Domain_List": [ "http://www.w3.org", "http://httpd.apache.org", "https://bugs.launchpad.net" ], "Classify_byRisk_Level": { "Total": 1, "High": 0, "Medium": 0, "Low": 1 }, "Classify_byRisk_Domain": { "http://your-domain": { "XSS": { "Low": 1 } } }, "Classify_byRisk_Vulnerability": { "XSS": 1 }, "Details": { "XSS": { "RiskLevel": "Low", "Vuln_Desc": "XSS(Cross-site Scripting) 취약점은 .... (중략)", "Vuln_Desc2": "- 사용자로부터 입력 받은 값이 올바른 범위 .... (중략)", "0": { "Title": "XSS #1", "vuln_key": "http://your-domain_XSS_0", "URL": "[GET]  http://your-domain/....(중략)", "Request_Header": "", "Referer": "", "Request_Body": "", "newline": "true", "VulnParam": "", "VulnSTR": "", "Response_Data": [ "Allow: POST,OPTIONS,HEAD,GET" ], "Description": "", "Reference": "" } } }, "Recommendation": { "XSS": "사용자로부터 입력 받은 값이 정확히 예측 가능한 .... (중략)" } } } ``` - 진단 리포트 출력 오류: 잘못된 `InstanceId`를 입력한 경우 ``` { "error": { "errorCode": 901, "message": "API Call Fail" } } ``` ## 샘플 코드 진단 리포트를 출력하려면 진단 검색 API와 진단 리포트 출력 API가 필요합니다. 진단 검색 API를 통해서 진단 리포트를 출력할 진단의 `instanceNo`의 값을 추출하고 이 값을 이용하여 진단 리포트 출력 API를 호출해야 합니다. 진단 검색 및 `instanceNo` 확인 방법 및 해당 API의 샘플 코드에 대한 자세한 내용은 [getJobs](/docs/security-websecuritychecker-getjobs) 또는 [searchJobs](/docs/security-websecuritychecker-searchjobs)을 참조해 주십시오. 진단 검색 API(searchJobs)로 검색한 샘플 코드는 다음과 같습니다. - 검색 유형: `url` - 키워드: `target-domain.com` ``` # 요청 예시 $ python jobSearch.py "url target-domain.com" # 응답 예시 { "returnCode": "0", "returnDesc": "Request Success", "returnMessage": "Success", "resources": { "total_cnt": 1, "total_page_cnt": 1, "current_start_page": 1, "current_end_page": 1, "record_data": [ { "instanceNo": "1234567890", "start_date": "2024-07-09 15:37:04", "end_date": "2024-07-09 15:39:54", "status": "진단 완료", "progress": null, "start_url": "http://target-domain.com", "crawl_cnt": "1", "scan_cnt": "1", "memo": "Wsc Sample", "result_button": "report", "result_desc": "", "rescan_button": "possible", "slave_data": null } ] } } ``` make_signature 함수로 시그니처를 생성하여 요청 헤드를 생성한 후 입력한 요청 파라미터에 따라 진단하기 전에 취소하여 응답 코드가 200인 경우 결과를 출력하는 샘플 코드는 다음과 같습니다. ``` import sys import os import hashlib import hmac import base64 import requests import time import json from pprint import pprint def make_signature(method, uri, timestamp): access_key = "{accessKey}" # access key id (from portal or sub account) secret_key = "{secretKey}" # secret key (from portal or sub account) secret_key = bytes(secret_key, 'UTF-8') method = method uri = uri message = method + " " + uri + "\n" + timestamp + "\n" + access_key message = bytes(message, 'UTF-8') signingKey = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest()) return signingKey method = 'GET' instanceId = "{instanceId}" # instance id (from api) uri = f'/api/v1/jobs/{instanceId}/report' timestamp = str(int(time.time() * 1000)) signature = make_signature(method, uri, timestamp) headers = { 'x-ncp-apigw-signature-v2': signature.decode('utf-8'), 'x-ncp-apigw-timestamp': timestamp, 'x-ncp-iam-access-key': '{accessKey}', # access key id (from portal or sub account) 'Content-Type': 'application/json' } response = requests.request( method, f"https://wsc.apigw.ntruss.com{uri}", headers=headers ) if response.status_code == 200: pprint(json.loads(response.text)) else: pprint(json.loads(response.text)) ``` 참고 샘플 코드는 Python3를 기반으로 작성했습니다. Java, Node.js 등 다른 언어로 작성한 샘플 코드는 API Gateway 사용 가이드의 [API 호출](https://guide.ncloud-docs.com/docs/apigw-myproducts#API%ED%98%B8%EC%B6%9C)을 참조해 주십시오.