--- title: "createJob" slug: "security-websecuritychecker-createjob" tags: ["Web Security Checker"] updated: 2026-09-17T09:16:56Z published: 2026-09-17T09:16:56Z canonical: "api.ncloud-docs.com/security-websecuritychecker-createjob" --- > ## 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. # createJob Classic/VPC 환경에서 이용 가능합니다. 신규 진단 작업을 등록하거나 진단 완료한 작업을 재진단 작업으로 생성합니다. 주의 createJob API 사용 시 다음 사항을 주의해 주십시오. - 고객 소유의 웹 서버가 아닌 대상을 진단할 경우 발생할 수 있는 각종 법적 책임(업무방해, 정보통신망법 위반 등 관련 민형사상 책임)은 본인에게 있음을 알려드립니다. API를 사용하는 것은 고객이 이를 동의한 것으로 간주합니다. - createJob API 호출 시 과금이 발생합니다. 호출 전 반드시 요금 정책을 [Web Security Checker 소개 페이지](https://www.ncloud.com/product/security/webSecurityChecker)에서 확인해 주십시오. 참고 createJob API 사용 시 다음 사항을 참고해 주십시오. - createJob API는 네이버 클라우드 플랫폼에서 생성한 서버에 대한 진단만 지원합니다. - 네이버 클라우드 플랫폼에서 생성하지 않은 외부 서버는 네이버 클라우드 플랫폼 콘솔의 Web Security Checker에서 진행해 주십시오. - createJob API는 예약 기능을 제공하지 않으므로 API 호출 즉시 진단을 시작합니다. - 예약 기능은 네이버 클라우드 플랫폼 콘솔의 Web Security Checker에서 진행해 주십시오. - 예약 기능이 필요한 경우, API 구현 과정에서 예약 시간에 createJob API를 호출해 주십시오. ## 요청 요청 형식을 설명합니다. 요청 형식은 다음과 같습니다. | 메서드 | URI | | --- | --- | | PUT | /api/v1/job | ### 요청 헤더 Web Security Checker에서 공통으로 사용하는 헤더에 대한 정보는 [Web Security Checker 요청 헤더](/docs/security-websecuritychecker#%EC%9A%94%EC%B2%AD%ED%97%A4%EB%8D%94)를 참조해 주십시오. ### 요청 경로 파라미터 요청 경로 파라미터에 대한 설명은 다음과 같습니다. | 필드 | 타입 | 필수 여부 | 설명 | | --- | --- | --- | --- | | `StartUrl` | String | Required | 진단 대상 URL - <예시> `"https://www.ncloud.com"` | | `ExcludeUrl` | List | Optional | 진단 제외 URL 목록 - <예시> `[ "https://www.ncloud.com/events", "https://www.ncloud.com/product/security/webSecurityChecker"]` | | `Headers` | Object | Optional | 인증을 위한 HTTP Header 정보 - <예시> `{ "Cookie": "JSESSIONID=AB123123123123ASAS", "Accept": "text/html.....", "Authorization": "Bearer ejs..."` | | `VulnItems` | List | Required | 진단 항목 목록 - <예시> `[ "ALL" ]`, `["XSS", "SSI Injection", ...]` - [진단 항목 예약어 목록](/docs/security-websecuritychecker-createjob#%EC%A7%84%EB%8B%A8%ED%95%AD%EB%AA%A9%EC%98%88%EC%95%BD%EC%96%B4%EB%AA%A9%EB%A1%9D) 참고 | | `UserAgent` | String | Required | 진단 작업에 이용할 브라우저(User-Agent) 정보를 선택 - `"Android"` \| `"iPhone"` \| `"PC Chrome"` \| `"PC IE"` - [UserAgent 예약어 목록](/docs/security-websecuritychecker-createjob#UserAgent%EC%98%88%EC%95%BD%EC%96%B4%EB%AA%A9%EB%A1%9D) 참고 | | `Speed` | String | Required | 진단 작업의 속도를 조절 - `"1"` \| `"2"` \| `"3"` - `"1"`: 보통 - `"2"`: 조금 빠르게 - `"3"`: 빠르게 | | `Memo` | String | Optional | 진단 작업에 대한 메모 - <예시> `"상반기 보안진단"` | | `MasterInstanceNo` | String | Optional | 재진단 작업을 생성할 완료된 진단의 인스턴스 번호(InstanceNo) - 재진단을 위한 인스턴스 번호는 [getJobs](/docs/security-websecuritychecker-getjobs) 참조 - <예시> `"1234111231"` | ### 예약어 목록 예약어 목록은 다음과 같습니다. #### UserAgent 예약어 목록 Web Securtiy Checker는 사용자의 웹 사이트가 최적으로 지원하는 브라우저를 선택할 수 있도록 진단 옵션을 제공합니다. 다음 UserAgent 예약어에 대한 설명을 참고해, 진단 생성 시 필요한 `UserAgent` 값을 지정해 주십시오. | 예약어 | 설명 | | --- | --- | | `PC Chrome` | PC 환경의 Chrome 브라우저 | | `PC IE` | PC 환경의 Internet Explorer 브라우저 | | `iPhone` | 모바일 환경의 iPhone 브라우저 | | `Android` | 모바일 환경의 Android 브라우저 | #### 진단 항목 예약어 목록 진단 생성 API는 진단 항목을 명시하여 원하는 진단을 선택적으로 할 수 있는 기능을 제공합니다. 참고 진단 항목에 대한 자세한 내용은 [Web Security Checker 소개 페이지 > 진단 항목](https://www.ncloud.com/product/security/webSecurityChecker)에서도 확인할 수 있습니다. 다음 진단 항목 예약어에 대한 설명을 참고해, 진단 생성 시 필요한 `VulnItems` 값을 지정해 주십시오. - 모든 점검 항목으로 진단할 경우: `ALL` 키워드 선택 - 일부 점검 항목만으로 진단할 경우: 원하는 키워드만 선택 | 예약어 | 설명 | | --- | --- | | `ALL` | Web Security Checker가 지원하는 모든 진단 항목으로 진단을 수행(권장 옵션) | | `LFI` | 웹 서버 내부에 위치한 악의적인 파일을 포함(Include)하여 해당 파일을 실행하는 취약점 | | `SQL Injection` | 웹 애플리케이션에서 사용되는 SQL 구문에 공격자가 임의의 구문을 주입(Injection)하여 내부 데이터베이스의 데이터를 유출, 변조할 수 있는 취약점 | | `XSS` | 공격자가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점 | | `RFI` | 원격지의 공격자 서버에 위치한 악의적인 파일을 포함(Include)하여 해당 파일을 실행하는 취약점 | | `SSRF` | 외부에서는 접근되지 않는 내부의 다른 서버로 요청하도록 개입하여 내부 서버가 의도하지 않은 행위를 하도록 하는 취약점 | | `File Upload` | 악의적인 스크립트 파일을 웹 서버에 업로드하여 접근할 경우, 웹 서버 사용자 권한으로 실행이 되는 취약점 | | `File Download` | 서버에 존재하는 파일이 의도하지 않게 클라이언트로 다운로드되는 취약점 | | `XXE` | XML 문서에서 동적으로 외부 URI의 리소스를 포함시킬 수 있는 External Entity 기능을 악용하여 의도하지 않은 동작을 하도록 하는 취약점 | | `Command Injection` | 공격자가 서버에 직접적으로 명령을 전달하고 실행할 수 있는 취약점 | | `Insufficient Authorization` | 일반적으로 사용자에게 노출되지 않아야 하는 특정 웹 애플리케이션에 대한 접근 가능 여부를 점검하는 항목 | | `Specific Vulnerability` | 특정 애플리케이션과 관련된 파급력이 큰 취약점들에 대해 점검하는 항목 | | `File Management` | 웹 서버를 운영하는 데 불필요한 파일은 모두 삭제하거나 다른 시스템에서 관리되어야 함 | | `Directory Listing` | 디렉터리 내 파일 리스트가 노출될 수 있는 취약점 | | `Source Code Disclosure` | 웹 서버가 스크립트 파일을 정상적으로 처리하지 못해 소스 코드가 그대로 노출되는 취약점 | | `Information Disclosure` | 웹 서비스에서 서버 정보, 오류 정보 등 공격에 활용될 수 있는 정보가 노출되는 취약점 | | `URL Redirection` | 사용자가 의도하지 않은 페이지로 이동시킬 수 있는 취약점 | | `Insecure SSL/TLS` | 안전하지 않은 SSL/TLS 버전 사용으로 인해 발생하는 취약점을 점검하는 항목 | | `Mixed Content` | 보호되어야 하는 중요한 콘텐츠가 HTTP를 사용해 전송되는 취약점 | | `HTTP Request Smuggling` | 공격자가 조작된 HTTP 패킷을 웹 서버로 전송하여, 원격에 있는 임의의 사용자가 웹 서버로 전송하는 HTTP 패킷을 조작할 수 있는 취약점 | | `Personal Information Exposure` | 웹 서비스에서 주민등록번호, 신용카드번호 등 개인정보가 평문으로 노출되는 취약점 | | `SSI Injection` | SSI(Server-Side Includes) 설정에 의해 악의적인 동적 HTML 코드가 실행될 수 있는 취약점 | | `Unnecessary HTTP Method` | 서버 설정 미흡으로 불필요한 HTTP 메서드가 노출되어 발생하는 취약점 | | `Buffer Overflow` | 프로그램이 할당된 메모리 버퍼를 초과하여 인접한 다른 메모리에 데이터를 쓰거나 수정할 때 발생하는 보안 취약점 | | `Graphql Misconfiguration` | GraphQL의 설정 미흡으로 인해 일부 옵션이 활성화될 때 발생하는 보안 취약점 | | `Tampering Cookie` | 안전하지 않은 쿠키 사용으로 인해 발생하는 취약점을 점검하는 항목 | | `Swagger Leak` | Swagger/OpenAPI 등 API 문서가 인증 없이 외부에 노출되어 발생하는 취약점을 점검하는 항목 | ### 요청 예시(신규) 요청 예시는 다음과 같습니다. ``` curl --location --request PUT 'https://wsc.apigw.ntruss.com/api/v1/job' \ --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' \ --data-raw '{ "StartUrl": "https://www.ncloud.com", "ExcludeUrl": [ "https://www.ncloud.com/event", "https://www.ncloud.com/robot.txt" ], "Headers": { "Upgrade-Insecure-Requests": "1", "Accept": "text/html.....", "Accept-Encoding": "gzip, deflate", "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7", "Cookie": "XSRF-TOKEN=eyJ.....; PHPSESSIONID=e.....", "X-Custom-Header": "Bar" }, "VulnItems": [ "ALL" ], "UserAgent": "Android", "Speed": "1", "Memo": "OPEN API TEST" }' ``` ### 요청 예시(재진단) 요청 예시는 다음과 같습니다. #### 재진단 가능한 진단 검색(수동) 다음 예와 같이 [getJobs (Web Security Checker)](/docs/security-websecuritychecker-getjobs) API를 호출한 응답에서 `resources > record_data` 속성의 항목 중 `"rescan_button": "possible"`로 표기된 항목의 `instanceNo`를 확인해 주십시오. ``` # 요청 예시 curl --location --request GET "https://wsc.apigw.ntruss.com/api/v1/jobs?limit=10&page=1" \ --header 'Content-Type: application/json' \ --header 'x-ncp-iam-access-key: {x-ncp-iam-access-key}' \ --header 'x-ncp-apigw-timestamp: {x-ncp-apigw-timestamp}' \ --header 'x-ncp-apigw-signature-v2: {x-ncp-apigw-signature-v2}' # 응답 예시 { "returnCode": "0", "returnDesc": "Request Success", "returnMessage": "성공", "resources": { "total_cnt": 1, "total_page_cnt": "1", "current_start_page": "1", "current_end_page": "10", "record_data": [ { "instanceNo": "12311231", "start_date": "2020-12-02 23:34:54", "end_date": "2020-12-02 23:36:43", "status": "Complete", "start_url": "http://ncloud.com", "crawl_cnt": "10", "scan_cnt": "1", "memo": "OPEN API 테스트 (#1)", "result_button": "report", "result_desc": null, "rescan_button": "possible", "slave_data": null }, ] } } ``` - `rescan_button`의 값이 `null` 혹은 `expired`인 경우는 재진단할 수 없습니다. #### 재진단 가능한 진단 검색(jq 유틸 사용) 다음 예와 같이 [getJobs (Web Security Checker)](/docs/security-websecuritychecker-getjobs) API와 `jq` 유틸을 이용해 재진단 가능한 `instanceNo` 목록을 확인할 수 있습니다. ``` # 요청 예시 curl --location --request GET "https://wsc.apigw.ntruss.com/api/v1/jobs?limit=10&page=1" \ --header 'Content-Type: application/json' \ --header 'x-ncp-iam-access-key: {x-ncp-iam-access-key}' \ --header 'x-ncp-apigw-timestamp: {x-ncp-apigw-timestamp}' \ --header 'x-ncp-apigw-signature-v2: {x-ncp-apigw-signature-v2}' | jq '.resources.record_data[] | select( .rescan_button == "possible" ) | .instanceNo' # 응답 예시 %"12311231" ``` - `instanceNo`가 없는 경우, 재진단 가능한 진단 작업이 없음을 의미합니다. #### 재진단 작업 생성 재진단 작업을 생성하는 예시는 다음과 같습니다. ``` curl --location --request PUT 'https://wsc.apigw.ntruss.com/api/v1/job' \ --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' \ --data-raw '{ "StartUrl": "https://www.ncloud.com", "ExcludeUrl": [ "https://www.ncloud.com/event", "https://www.ncloud.com/robot.txt" ], "Headers": { "Upgrade-Insecure-Requests": "1", "Accept": "text/html.....", "Accept-Encoding": "gzip, deflate", "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7", "Cookie": "XSRF-TOKEN=eyJ.....; PHPSESSIONID=e.....", "X-Custom-Header": "Bar" }, "VulnItems": [ "ALL" ], "UserAgent": "Android", "Speed": "1", "Memo": "OPEN API TEST", "MasterInstanceNo": "12311231" }' ``` - `masterInstanceNo` 입력 값은 반드시 문자열 타입으로 입력해 주십시오. - <예시> `"MasterInstanceNo": "12311231"` - `VulnItems` 입력 값은 반드시 리스트 타입으로 입력해 주십시오. - <예시> `"VulnItems": ["ALL"]` ## 응답 응답 형식을 설명합니다. ### 응답 상태 코드 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", "resources": null } ``` - 진단 작업 생성 오류: 잘못된 InstanceId를 입력한 경우 ``` { "error": { "errorCode": 901, "message": "API Call Fail" } } ``` - 진단 작업 생성 오류: `VulnItems` 파라미터에 `진단 항목 예약어 목록`에 없는 키워드가 존재하거나 `ALL` 예약어를 다른 예약어와 함께 사용할 경우 ``` { "error": { "errorCode": 160433, "message": "Param Value Not Define - VulnItems" } } ``` - 진단 작업 생성 오류: 파라미터를 잘못된 타입으로 입력한 경우 ``` { "error": { "errorCode": 160433, "message": "Param Value Not Define - VulnItems" } } ``` - 진단 작업 생성 오류: 고객 본인의 자산이 아닌 서버에 대해 진단을 요청할 경우(API를 이용하는 계정의 서버에 대한 권한 확인 필요) ``` { "error": { "errorCode": 160451, "message": "Assets_Check_Fail" } } ``` ## 샘플 코드 샘플 코드를 소개합니다. ### 신규 진단 생성 make_signature 함수로 시그니처를 생성하여 요청 헤드를 생성한 후 입력한 요청 파라미터에 따라 신규 진단 작업을 생성하여 응답 코드가 200인 경우 결과를 출력하는 샘플 코드는 다음과 같습니다. ``` import sys import os import hashlib import hmac import base64 import requests import time import json 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 timestamp = str(int(time.time() * 1000)) method = 'PUT' uri = '/api/v1/job' payload = { "StartUrl": "https://www.ncloud.com", "ExcludeUrl": [ "https://www.ncloud.com/event", "https://www.ncloud.com/robot.txt" ], "Headers": { "Upgrade-Insecure-Requests": "1", "Accept": "text/html.....", "Accept-Encoding": "gzip, deflate", "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7", "Cookie": "XSRF-TOKEN=eyJ.....; PHPSESSIONID=e.....", "X-Custom-Header": "Bar" }, "VulnItems": [ "ALL" ], "UserAgent": "Android", "Speed": "1", "Memo": "OPEN API TEST" } 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, data=json.dumps(payload), # Json format required ) if response.status_code == 200: print(response.text) ``` ### 재진단 생성 재진단 작업을 생성하려면 재진단 생성이 가능한 진단의 `instanceNo`의 값을 추출하고, 이 값을 이용하여 재진단 생성 API를 호출해야 합니다. - [getJobs](/docs/security-websecuritychecker-getjobs) 또는 [searchJobs](/docs/security-websecuritychecker-searchjobs) API를 호출한 응답에서 `resources > record_data` 속성의 항목 중 `"rescan_button": "possible"`로 표기된 항목의 `instanceNo`를 확인해 주십시오. - jq 유틸 사용하여 재진단 가능한 진단의 `instanceNo`의 값을 추출하는 방법은 [재진단 가능한 진단 검색(jq 유틸 사용)](/docs/security-websecuritychecker-createjob#%EC%9E%AC%EC%A7%84%EB%8B%A8%EA%B0%80%EB%8A%A5%ED%95%9C%EC%A7%84%EB%8B%A8%EA%B2%80%EC%83%89jq%EC%9C%A0%ED%8B%B8%EC%82%AC%EC%9A%A9)을 참조해 주십시오. 만약, `instanceNo`가 없다면 재진단 가능한 진단 작업이 없음을 의미합니다. make_signature 함수로 시그니처를 생성하여 요청 헤드를 생성한 후 입력한 요청 파라미터에 따라 재진단 작업을 생성하여 응답 코드가 200인 경우 결과를 출력하는 샘플 코드는 다음과 같습니다. ``` import sys import os import hashlib import hmac import base64 import requests import time import json 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 timestamp = str(int(time.time() * 1000)) method = 'PUT' uri = '/api/v1/job' payload = { "StartUrl": "https://www.ncloud.com", "ExcludeUrl": [ "https://www.ncloud.com/event", "https://www.ncloud.com/robot.txt" ], "Headers": { "Upgrade-Insecure-Requests": "1", "Accept": "text/html.....", "Accept-Encoding": "gzip, deflate", "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7", "Cookie": "XSRF-TOKEN=eyJ.....; PHPSESSIONID=e.....", "X-Custom-Header": "Bar" }, "VulnItems": [ "ALL" ], "UserAgent": "Android", "Speed": "1", "Memo": "OPEN API TEST", "MasterInstanceNo": "12311231" } response = requests.request( method, f"https://wsc.apigw.ntruss.com{uri}", headers=headers, data=json.dumps(payload), # Json format required ) if response.status_code == 200: print(response.text) ``` 참고 샘플 코드는 Python3를 기반으로 작성했습니다. Java, Node.js 등 다른 언어로 작성한 샘플 코드는 API Gateway 사용 가이드의 [API 호출](https://guide.ncloud-docs.com/docs/apigw-myproducts#API%ED%98%B8%EC%B6%9C)을 참조해 주십시오.