API Skaner podatności witryny
Znajdź ujawnione oprogramowanie, ryzykowne konfiguracje i znane podatne wersje w publicznej witrynie. Każdy wynik wyjaśnia, co sprawdzono, dlaczego pasuje i jak silne są dowody. Użyj tej referencji, aby wybrać operację i zintegrować jej udokumentowany kontrakt odpowiedzi.
Operacje
GET /v1/vulnerabilities
GET
/v1/vulnerabilities
Kredyty: 8-12
Parametry zapytania
| Parametr | Typ | wymagane |
|---|---|---|
| url | string | opcjonalne |
| domain | string | opcjonalne |
| mode |
string
Dozwolone wartości
standarddeep
Domyślnie
standard
|
opcjonalne |
Pola odpowiedzi
| Pole | Typ |
|---|---|
target |
object |
target.requested_url |
string |
target.final_url |
string |
target.hostname |
string |
scan |
object |
scan.mode |
string |
scan.status |
string |
scan.checked_at |
string |
scan.duration_ms |
integer |
scan.disclaimer |
string |
summary |
object |
summary.posture |
string |
summary.risk_level |
string |
summary.finding_count |
integer |
summary.version_affected_count |
integer |
summary.misconfiguration_count |
integer |
summary.urgent_count |
integer |
summary.severity_counts |
object |
findings[] |
object[] |
findings[] |
object |
findings[].fingerprint |
string |
findings[].classification |
string |
findings[].severity |
string |
findings[].priority |
string |
findings[].title |
string |
findings[].summary |
string |
findings[].component |
object |
findings[].component.technology_id |
string |
findings[].component.name |
string |
findings[].component.detected_version |
string |
findings[].component.version_kind |
string |
findings[].component.confidence |
string |
findings[].component.confidence_score |
integer |
findings[].component.ecosystem |
string |
findings[].component.package |
string |
findings[].component.purl |
string |
findings[].advisory |
object |
findings[].advisory.id |
string |
findings[].advisory.aliases[] |
string[] |
findings[].advisory.cves[] |
string[] |
findings[].advisory.published_at |
string | null |
findings[].advisory.modified_at |
string | null |
findings[].advisory.cvss[] |
object[] |
findings[].advisory.cvss[] |
object |
findings[].advisory.cvss[].type |
string |
findings[].advisory.cvss[].vector |
string |
findings[].advisory.fixed_versions[] |
string[] |
findings[].advisory.affected_ranges[] |
object[] |
findings[].advisory.affected_ranges[] |
object |
findings[].advisory.references[] |
string[] |
findings[].exploitation |
object |
findings[].exploitation.cisa_kev |
boolean | null |
findings[].exploitation.kev_added_at |
string | null |
findings[].exploitation.kev_required_action |
string | null |
findings[].exploitation.known_ransomware_use |
string | null |
findings[].exploitation.epss_probability |
number | null |
findings[].exploitation.epss_percentile |
number | null |
findings[].exploitation.epss_date |
string | null |
findings[].evidence |
object |
findings[].evidence.confidence |
string |
findings[].evidence.observed[] |
string[] |
findings[].evidence.limitations[] |
string[] |
findings[].remediation |
object |
findings[].remediation.summary |
string |
findings[].remediation.fixed_versions[] |
string[] |
findings[].sources[] |
string[] |
components[] |
object[] |
components[] |
object |
components[].technology_id |
string |
components[].name |
string |
components[].detected_version |
string | null |
components[].version_kind |
string | null |
components[].confidence |
string |
components[].advisory_status |
string |
components[].matched_advisories |
integer |
coverage |
object |
coverage.target_response |
string |
coverage.technology_detection |
string |
coverage.package_advisories |
string |
coverage.known_exploitation |
string |
coverage.exploitation_probability |
string |
coverage.detected_components |
integer |
coverage.versioned_components |
integer |
coverage.advisory_eligible_components |
integer |
coverage.advisory_checked_components |
integer |
coverage.advisory_deferred_components |
integer |
coverage.advisory_query_limit |
integer |
coverage.relay_used |
boolean |
coverage.limitations[] |
string[] |
sources[] |
object[] |
sources[] |
object |
sources[].id |
string |
sources[].name |
string |
sources[].owner |
string |
sources[].url |
string |
sources[].status |
string |
sources[].retrieved_at |
string | null |
sources[].cache_hit |
boolean |
sources[].expected_freshness |
string |
sources[].fallback_behavior |
string |
sources[].cost |
string |
_meta |
object |
Przykładowe żądanie
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/vulnerabilities?url=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttps%2Fexample.com&domain=example.com&mode=standard"const response = await fetch("https://domscan.net/v1/vulnerabilities?url=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttps%2Fexample.com&domain=example.com&mode=standard", {
headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);import os
import requests
response = requests.get(
"https://domscan.net/v1/vulnerabilities?url=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttps%2Fexample.com&domain=example.com&mode=standard",
headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/vulnerabilities?url=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttps%2Fexample.com&domain=example.com&mode=standard", nil)
if err != nil {
panic(err)
}
req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(resp.Status, string(data))
}require "json"
require "net/http"
uri = URI("https://domscan.net/v1/vulnerabilities?url=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttps%2Fexample.com&domain=example.com&mode=standard")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts JSON.pretty_generate(JSON.parse(response.body))Przykładowa odpowiedź
{
"target": {
"requested_url": "https://www.example.com/",
"final_url": "https://www.example.com/",
"hostname": "www.example.com"
},
"scan": {
"mode": "standard",
"status": "complete",
"checked_at": "2026-10-09T10:15:30.000Z",
"duration_ms": 3120,
"disclaimer": "A clean result means DomScan did not detect an issue within the documented scan coverage. Automated scanning cannot prove that an application is vulnerability-free or replace an authorized penetration test."
},
"summary": {
"posture": "review",
"risk_level": "medium",
"finding_count": 2,
"version_affected_count": 0,
"misconfiguration_count": 2,
"urgent_count": 0,
"severity_counts": {
"critical": 0,
"high": 0,
"medium": 1,
"low": 1,
"info": 0,
"unknown": 0
}
},
"findings": [
{
"fingerprint": "configuration:content-security-policy:www.example.com",
"classification": "security_misconfiguration",
"severity": "medium",
"priority": "elevated",
"title": "Content Security Policy is not advertised",
"summary": "The observed response did not include a Content-Security-Policy header.",
"evidence": {
"confidence": "high",
"observed": [
"Public response did not include the expected content-security-policy protection."
],
"limitations": [
"header_policy_can_vary_by_path_or_response_status"
]
},
"remediation": {
"summary": "Deploy a restrictive Content Security Policy in report-only mode first, then enforce it.",
"fixed_versions": []
},
"sources": [
"target_response"
]
},
{
"fingerprint": "configuration:referrer-policy:www.example.com",
"classification": "security_misconfiguration",
"severity": "low",
"priority": "normal",
"title": "Referrer Policy is not advertised",
"summary": "The response did not include an explicit Referrer-Policy header.",
"evidence": {
"confidence": "high",
"observed": [
"Public response did not include the expected referrer-policy protection."
],
"limitations": [
"header_policy_can_vary_by_path_or_response_status"
]
},
"remediation": {
"summary": "Choose and deploy a Referrer-Policy that matches the application privacy and analytics requirements.",
"fixed_versions": []
},
"sources": [
"target_response"
]
}
],
"components": [
{
"technology_id": "jquery",
"name": "jQuery",
"detected_version": "3.7.1",
"version_kind": "asset",
"confidence": "high",
"advisory_status": "checked",
"matched_advisories": 0
},
{
"technology_id": "cloudflare",
"name": "Cloudflare",
"detected_version": null,
"version_kind": null,
"confidence": "high",
"advisory_status": "mapping_unavailable",
"matched_advisories": 0
}
],
"coverage": {
"target_response": "checked",
"technology_detection": "checked",
"package_advisories": "checked",
"known_exploitation": "not_requested",
"exploitation_probability": "not_requested",
"detected_components": 2,
"versioned_components": 1,
"advisory_eligible_components": 1,
"advisory_checked_components": 1,
"advisory_deferred_components": 0,
"advisory_query_limit": 20,
"relay_used": true,
"limitations": [
"Only exact reviewed technology-to-package mappings are checked against OSV.",
"Versionless or semantically incompatible detections are not reported as vulnerable.",
"This passive scan does not send exploit payloads or prove exploitability.",
"Response headers and exposed versions can vary by path, edge location, or authentication state."
]
},
"sources": [
{
"id": "target_response",
"name": "Observed public response",
"owner": "Target website",
"url": "https://domscan.net/tech-stack-api",
"status": "checked",
"retrieved_at": "2026-10-09T10:15:30.000Z",
"cache_hit": false,
"expected_freshness": "Live at scan time",
"fallback_behavior": "Unavailable signals remain unknown and never imply that the target is unaffected",
"cost": "none"
},
{
"id": "osv",
"name": "OSV",
"owner": "Google Open Source Security Team",
"url": "https://google.github.io/osv.dev/",
"status": "checked",
"retrieved_at": "2026-10-09T10:15:29.000Z",
"cache_hit": false,
"expected_freshness": "OSV targets advisory freshness within 15 minutes",
"fallback_behavior": "Use a fresh cached result when available; otherwise mark the component advisory check unknown",
"cost": "none"
},
{
"id": "cisa_kev",
"name": "CISA Known Exploited Vulnerabilities Catalog",
"owner": "Cybersecurity and Infrastructure Security Agency",
"url": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog",
"status": "not_requested",
"retrieved_at": null,
"cache_hit": false,
"expected_freshness": "Catalog changes are checked hourly",
"fallback_behavior": "Use a fresh cached catalog when available; otherwise leave exploitation status unknown",
"cost": "none"
},
{
"id": "first_epss",
"name": "Exploit Prediction Scoring System",
"owner": "FIRST",
"url": "https://www.first.org/epss/",
"status": "not_requested",
"retrieved_at": null,
"cache_hit": false,
"expected_freshness": "Scores are generated daily",
"fallback_behavior": "Return the advisory without an EPSS value and mark exploitation probability unknown",
"cost": "none"
}
],
"_meta": {
"served_by": "pop=MAD country=ES",
"analysis_status": "complete"
}
}
Kody statusu HTTP
200OK400Nieprawidłowe żądanie401Nieautoryzowany402Wymagana płatność429Zbyt wiele żądań503Usługa niedostępna