createJob
    • PDF

    createJob

    • PDF

    기사 요약

    Classic/VPC 환경에서 이용 가능합니다.

    신규 진단 작업을 등록하거나 진단 완료한 작업을 재진단 작업으로 생성합니다.

    주의

    고객 소유의 웹 서버가 아닌 대상을 진단할 경우 발생할 수 있는 각종 법적 책임(업무방해, 정보통신망법 위반 등 관련 민형사상 책임)은 본인에게 있음을 알려드립니다. API를 사용하는 것은 고객이 이를 동의한 것으로 간주합니다.

    참고

    지원 범위 및 주의 사항

    요청

    요청 형식을 설명합니다. 요청 형식은 다음과 같습니다.

    메서드URI
    PUT/job

    요청 헤더

    Web Security Checker에서 공통으로 사용하는 헤더에 대한 자세한 내용은 Web Security Checker 요청 헤더를 참조해 주십시오.

    요청 경로 파라미터

    파라미터에 대한 설명은 다음과 같습니다.

    필드타입필수 여부설명
    StartUrlStringRequired진단 대상 URL
    • <예시> "https://www.ncloud.com"
    ExcludeUrlListRequired진단 제외 URL 목록
    • <예시> [ "https://www.ncloud.com/events", "https://www.ncloud.com/product/security/webSecurityChecker"]
    HeadersObjectOptional인증을 위한 HTTP Header 정보
    • <예시> { "Cookie": "JSESSIONID=AB123123123123ASAS", "Accept": "text/html.....", "Authorization": "Bearer ejs..."
    VulnItemsListRequired진단 항목 목록
    UserAgentStringRequired진단 작업에 이용할 브라우저(User-Agent) 정보를 선택
    SpeedStringRequired진단 작업의 속도를 조절
    • "1" | "2" | "3"
      • "1": 보통
      • "2": 조금 빠르게
      • "3": 빠르게
    MemoStringOptional진단 작업에 대한 메모
    • <예시> "상반기 보안진단"
    MasterInstanceNoStringOptiona재진단 작업을 생성할 완료된 진단의 인스턴스 번호(InstanceNo)
    • 재진단을 위한 인스턴스 번호는 getJobs를 통해 확인
    • <예시> "1234111231"

    예약어 목록

    예약어 목록은 다음과 같습니다.

    UserAgent 예약어 목록

    Web Securtiy Checker는 사용자의 웹 사이트가 최적으로 지원하는 브라우저를 선택할 수 있도록 진단 옵션을 제공합니다.
    다음 UserAgent 예약어에 대한 설명을 참고해, 진단 생성 시 필요한 UserAgent 값을 지정해 주십시오.

    예약어설명
    PC ChromePC 환경의 Chrome 브라우저
    PC IEPC 환경의 Internet Explorer 브라우저
    iPhone모바일 환경의 iPhone 브라우저
    Android모바일 환경의 Android 브라우저

    진단 항목 예약어 목록

    진단 생성 API는 진단 항목을 명시하여 원하는 진단을 선택적으로 할 수 있는 기능을 제공합니다.

    참고

    진단 항목에 대한 자세한 내용은 Web Security Checker 소개 페이지 > 진단 항목에서도 확인할 수 있습니다.

    다음 진단 항목 예약어에 대한 설명을 참고해, 진단 생성 시 필요한 VulnItems 값을 지정해 주십시오.

    • 모든 점검 항목으로 진단할 경우: ALL 키워드 선택
    • 일부 점검 항목만으로 진단할 경우: 원하는 키워드만 선택
    예약어설명
    ALLWeb Security Checker가 지원하는 모든 진단 항목으로 진단을 수행(권장 옵션)
    LFI웹 서버 내부에 위치한 악의적인 파일을 포함(Include)하여 해당 파일을 실행하는 취약점
    SQL Injection웹 애플리케이션에서 사용되는 SQL 구문에 공격자가 임의의 구문을 주입(Injection)하여 내부 데이터베이스의 데이터를 유출, 변조할 수 있는 취약점
    XSS공격자가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점
    RFI원격지의 공격자 서버에 위치한 악의적인 파일을 포함(Include)하여 해당 파일을 실행하는 취약점
    SSRF외부에서는 접근되지 않는 내부의 다른 서버로 요청하도록 개입하여 내부 서버가 의도하지 않은 행위를 하도록 하는 취약점
    File Upload악의적인 스크립트 파일을 웹 서버에 업로드하여 접근할 경우, 웹 서버 사용자 권한으로 실행이 되는 취약점
    File Download서버에 존재하는 파일이 의도하지 않게 클라이언트로 다운로드되는 취약점
    XXEXML 문서에서 동적으로 외부 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 InjectionSSI(Server-Side Includes) 설정에 의해 악의적인 동적 HTML 코드가 실행될 수 있는 취약점

    요청 예시(신규)

    요청 예시는 다음과 같습니다.

    curl --location --request GET '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) API를 호출한 응답에서 resources > record_data 속성의 항목 중 "rescan_button": "possible"로 표기된 항목의 instanceNo를 확인해 주십시오.

    • rescan_button의 값이 null 혹은 expired인 경우는 재진단할 수 없습니다.
    # 요청 예시
    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
                },
            ]
        }
    }
    

    재진단 가능한 진단 검색(jq 유틸 사용)

    다음 예와 같이 getJobs (Web Security Checker) API와 jq 유틸을 이용해 재진단 가능한 instanceNo 목록을 확인할 수 있습니다.

    • 만약, 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"
    

    재진단 작업 생성

    • masterInstanceNo 입력 값은 반드시 문자열 타입으로 입력해 주십시오.
      • <예시> "MasterInstanceNo": "12311231"
    • VulnItems 입력 값은 반드시 리스트 타입으로 입력해 주십시오.
      • <예시> "VulnItems": ["ALL"]
    curl --location --request GET '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"
    }'
    

    응답

    응답 형식을 설명합니다.

    응답 상태 코드

    Web Security Checker API에서 공통으로 사용하는 오류 코드에 대한 자세한 내용은 Web Security Checker 공통 오류 코드를 참조해 주십시오.

    응답 예시

    응답 예시는 다음과 같습니다.

    • 진단 작업 생성 완료
    {
        "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 또는 searchJobs API를 호출한 응답에서 resources > record_data 속성의 항목 중 "rescan_button": "possible"로 표기된 항목의 instanceNo를 확인해 주십시오.
    • jq 유틸 사용하여 재진단 가능한 진단의 instanceNo의 값을 추출하는 방법은 재진단 가능한 진단 검색(jq 유틸 사용)을 참조해 주십시오. 만약, 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 호출을 참조해 주십시오.


    이 문서가 도움이 되었습니까?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.