--- title: "createJob" slug: "security-websecuritychecker-createjob" updated: 2026-09-17T09:58:23Z published: 2026-09-17T09:58:23Z 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は NAVERクラウドプラットフォームによって作成されたサーバに対する診断のみサポートします。 - NAVERクラウドプラットフォームによって作成されていない外部サーバは、NAVERクラウドプラットフォームコンソールの Web Security Checkerで診断を行ってください。 - createJob APIは予約機能を提供していないため、APIを呼び出すと同時に診断を開始します。 - 予約機能は NAVERクラウドプラットフォームコンソールの Web Security Checkerで使用できます。 - 予約機能が必要な場合は、API実装の際、予約時間に createJob APIを呼び出すようにしてください。 ## リクエスト リクエスト形式を説明します。リクエスト形式は次の通りです。 | メソッド | URI | | --- | --- | | PUT | /api/v1/job | ### リクエストヘッダ Web Security Checkerで共通して使用されるヘッダの詳細は、[Web Security Checkerのリクエストヘッダ](/docs/ja/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/ja/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/ja/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/ja/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` | Webサービスでサーバ情報、エラー情報などの攻撃に活用できる情報が晒される脆弱性 | | `URL Redirection` | ユーザーが意図していないページに移動させる脆弱性 | | `Insecure SSL/TLS` | 安全でない SSL/TLSバージョンの使用によって発生する脆弱性をチェックする項目 | | `Mixed Content` | 保護されるべき重要なコンテンツが HTTPを介して転送されてしまう脆弱性 | | `HTTP Request Smuggling` | 攻撃者が偽装された HTTPパケットをウェブサーバに転送し、遠隔地にいる不特定のユーザーがウェブサーバに転送する HTTPパケットを偽装する脆弱性 | | `Personal Information Exposure` | 住民登録番号、クレジットカード番号などの個人情報が Webサービスに平文で晒される脆弱性 | | `SSI Injection` | Server-Side Includes(SSI)設定によって悪意ある動的 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/ja/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/ja/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/ja/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/ja/security-websecuritychecker-getjobs)または[searchJobs](/docs/ja/security-websecuritychecker-searchjobs) APIを呼び出したレスポンスの`resources > record_data`属性の項目のうち、`"rescan_button": "possible"`と表記された項目の`instanceNo`を確認します。 - jqユーティリティを使用して再診断可能な診断の`instanceNo`値を抽出する方法は、[再診断可能な診断の検索(jqユーティリティ使用)](/docs/ja/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/ja/apigw-myproducts#API%ED%98%B8%EC%B6%9C)をご参照ください。