- 印刷する
- PDF
createJob
- 印刷する
- PDF
Classic/VPC環境で利用できます。
新規の診断ジョブを登録するか、診断完了したジョブを再診断ジョブとして作成します。
顧客所有のウェブサーバでない対象を診断する場合に発生し得る各種法的責任(業務妨害、情報通信網法の違反等に関する民事・刑事上の責任)はご本人にあることを予めご案内いたします。顧客が本 APIを使用した場合、これに同意したものとみなします。
サポート範囲および注意事項
- createJob APIは、NAVERクラウドプラットフォームコンソールで Web Security Checkerを申し込むと使用できます。
- createJob APIの呼び出し時に料金が発生します。Web Security Checkerの紹介ページで料金ポリシーを必ずご確認ください。
- createJob APIは NAVERクラウドプラットフォームによって作成されたサーバに対する診断のみサポートします。
- NAVERクラウドプラットフォームによって作成されていない外部サーバは、NAVERクラウドプラットフォームコンソール(Web Security Checker)を介してご利用ください。
- createJob APIは予約機能を提供していないため、APIを呼び出すと同時に診断を開始します。
- 予約機能は NAVERクラウドプラットフォームコンソール(Web Security Checker)を介してご利用ください。
- 予約機能が必要な場合は、API実装の際、予約時間に createJob APIを呼び出すようにしてください。
リクエスト
リクエスト形式を説明します。リクエスト形式は次の通りです。
メソッド | URI |
---|---|
PUT | /job |
リクエストヘッダ
Web Security Checkerで共通して使用されるヘッダの詳細は、Web Security Checkerのリクエストヘッダをご参照ください。
リクエストパスパラメータ
パラメータの説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
StartUrl | String | Required | 診断対象の URL
|
ExcludeUrl | List | Required | 診断除外 URLリスト
|
Headers | Object | Optional | 認証目的の HTTP Header情報
|
VulnItems | List | Required | 診断項目リスト
|
UserAgent | String | Required | 診断ジョブに利用するブラウザ(User-Agent)情報を選択
|
Speed | String | Required | 診断ジョブの速度を調整
|
Memo | String | Optional | 診断ジョブに関するメモ
|
MasterInstanceNo | String | Optiona | 再診断ジョブ作成対象の、完了した診断のインスタンス番号(InstanceNo)
|
予約語リスト
予約語リストは次の通りです。
UserAgent予約語リスト
Web Securtiy Checkerは、ユーザーのウェブサイトに最適なブラウザを選択できるように診断オプションを提供します。
次の UserAgent予約語の説明を参考にして、診断の作成時に必要なUserAgent
値を指定します。
予約語 | 説明 |
---|---|
PC Chrome | PC環境の Chromeブラウザ |
PC IE | PC環境の Internet Explorerブラウザ |
iPhone | モバイル環境の iPhoneブラウザ |
Android | モバイル環境の Androidブラウザ |
診断項目の予約語リスト
診断作成 APIは、診断項目を明示して、希望する診断を選択して行える機能を提供します。
診断項目の詳細は、Web Security Checkerの紹介ページ > 診断項目からもご確認できます。
次の診断項目予約語の説明を参考にして、診断の作成時に必要な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コードが実行される脆弱性 |
リクエスト例(新規)
リクエストのサンプルコードは次の通りです。
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の呼び出しをご参照ください。