getReport
- 印刷する
- PDF
getReport
- 印刷する
- PDF
記事の要約
この要約は役に立ちましたか?
ご意見ありがとうございます
Classic/VPC環境で利用できます。
診断ジョブが完了した診断のレポートを出力します。
リクエスト
リクエスト形式を説明します。リクエスト形式は次の通りです。
メソッド | URI |
---|---|
PATCH | /{instanceId}/report |
リクエストヘッダ
Web Security Checkerで共通して使用されるヘッダの詳細は、Web Security Checkerのリクエストヘッダをご参照ください。
リクエストパスパラメータ
パラメータの説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
InstanceId | Integer | Required | 診断の識別番号
|
リクエスト例
リクエストのサンプルコードは次の通りです。
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」の診断時に見つかった脆弱性の影響度
|
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 | - | 脆弱性を識別する固有キー
|
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 | - | レスポンスデータフィールドリストの改行有無を表示
|
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の共通エラーコードをご参照ください。
レスポンス例
レスポンスのサンプルコードは次の通りです。
- 診断レポート出力完了
{
"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または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の呼び出しをご参照ください。
この記事は役に立ちましたか?