{"data":{"skill":{"slug":"resciencelab-seo-geo","name":"seo-geo","icon":"📦","repo":"https://github.com/resciencelab/opc-skills/tree/main/.agents/skills/seo-geo/","status":"approved","author":"resciencelab","authorVersion":null,"skillstoreRevision":2},"audit":{"id":"2d369461-a231-41d1-8c28-7ca153598033","skill_id":"3a6bd1cc-c5a9-4e85-b930-5cf4d7a45026","version":5,"content_hash":"v3:ebdfe608f5de2b66ff37ab4af12af8ac4f5e8006:1bcce31ac3d47f4d96c03fff8fab91b9e6b8d9f8ad8aeaba94da9be393301a4c:d661bcc3ff66bf3cb5c27ab923fba37108fdafe0743a70429d62e69d67e4dbb7:736b696c6c732f7265736369656e63656c61622f73656f2d67656f:84f73822867cd53bf13a6284abe8068b","risk_level":"high","is_blocked":false,"safe_to_publish":false,"analysis_status":"ok","agent_auto_install_policy":"confirmation_required","manual_install_policy":"allowed","summary":"The audit confirms expected outbound requests to selected websites and the fixed DataForSEO API; most alerts are documentation or lexical false positives. The local audit accepts arbitrary URLs without blocking private, loopback, or link-local destinations, creating a high-confidence SSRF risk. No prompt injection or malicious credential handling was found.","remediation":[{"issue":"Arbitrary URL fetching can reach internal services.","severity":"high","suggestion":"Allow only public HTTP and HTTPS addresses. Revalidate DNS and redirects, block private ranges, and limit response size before parsing."}],"risk_factor_evidence":[{"factor":"network","evidence":[{"file":"examples/opc-skills-case-study.md","line_end":89,"line_start":89},{"file":"references/platform-algorithms.md","line_end":102,"line_start":102},{"file":"references/schema-templates.md","line_end":13,"line_start":13},{"file":"references/schema-templates.md","line_end":68,"line_start":68},{"file":"references/schema-templates.md","line_end":72,"line_start":72},{"file":"references/schema-templates.md","line_end":79,"line_start":79},{"file":"references/schema-templates.md","line_end":84,"line_start":84},{"file":"references/schema-templates.md","line_end":91,"line_start":91},{"file":"references/schema-templates.md","line_end":109,"line_start":109},{"file":"references/schema-templates.md","line_end":114,"line_start":114},{"file":"references/schema-templates.md","line_end":115,"line_start":115},{"file":"references/schema-templates.md","line_end":116,"line_start":116},{"file":"references/schema-templates.md","line_end":123,"line_start":123},{"file":"references/schema-templates.md","line_end":135,"line_start":135},{"file":"references/schema-templates.md","line_end":142,"line_start":142},{"file":"references/schema-templates.md","line_end":158,"line_start":158},{"file":"references/schema-templates.md","line_end":164,"line_start":164},{"file":"references/schema-templates.md","line_end":165,"line_start":165},{"file":"references/schema-templates.md","line_end":167,"line_start":167},{"file":"references/schema-templates.md","line_end":168,"line_start":168},{"file":"references/schema-templates.md","line_end":178,"line_start":178},{"file":"references/schema-templates.md","line_end":190,"line_start":190},{"file":"references/schema-templates.md","line_end":203,"line_start":203},{"file":"references/schema-templates.md","line_end":207,"line_start":207},{"file":"references/schema-templates.md","line_end":208,"line_start":208},{"file":"references/schema-templates.md","line_end":229,"line_start":229},{"file":"references/schema-templates.md","line_end":230,"line_start":230},{"file":"references/schema-templates.md","line_end":231,"line_start":231},{"file":"references/schema-templates.md","line_end":244,"line_start":244},{"file":"references/schema-templates.md","line_end":249,"line_start":249},{"file":"references/schema-templates.md","line_end":250,"line_start":250},{"file":"references/schema-templates.md","line_end":259,"line_start":259},{"file":"references/schema-templates.md","line_end":263,"line_start":263},{"file":"references/schema-templates.md","line_end":300,"line_start":300},{"file":"references/schema-templates.md","line_end":304,"line_start":304},{"file":"references/schema-templates.md","line_end":328,"line_start":328},{"file":"references/schema-templates.md","line_end":329,"line_start":329},{"file":"references/schema-templates.md","line_end":335,"line_start":335},{"file":"references/schema-templates.md","line_end":336,"line_start":336},{"file":"references/schema-templates.md","line_end":342,"line_start":342},{"file":"references/schema-templates.md","line_end":343,"line_start":343},{"file":"references/schema-templates.md","line_end":357,"line_start":357},{"file":"references/schema-templates.md","line_end":364,"line_start":364},{"file":"references/schema-templates.md","line_end":370,"line_start":370},{"file":"references/schema-templates.md","line_end":376,"line_start":376},{"file":"references/schema-templates.md","line_end":390,"line_start":390},{"file":"references/schema-templates.md","line_end":394,"line_start":394},{"file":"references/schema-templates.md","line_end":395,"line_start":395},{"file":"references/schema-templates.md","line_end":431,"line_start":431},{"file":"references/schema-templates.md","line_end":454,"line_start":454}]},{"factor":"filesystem","evidence":[{"file":"references/tools-and-apis.md","line_end":158,"line_start":158}]},{"factor":"env_access","evidence":[{"file":"references/tools-and-apis.md","line_end":168,"line_start":168},{"file":"scripts/credential.py","line_end":10,"line_start":10},{"file":"scripts/credential.py","line_end":11,"line_start":11}]},{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":43,"line_start":41},{"file":"SKILL.md","line_end":49,"line_start":43},{"file":"SKILL.md","line_end":51,"line_start":49},{"file":"SKILL.md","line_end":58,"line_start":51},{"file":"SKILL.md","line_end":60,"line_start":58},{"file":"SKILL.md","line_end":67,"line_start":60},{"file":"SKILL.md","line_end":69,"line_start":67},{"file":"SKILL.md","line_end":74,"line_start":69},{"file":"SKILL.md","line_end":82,"line_start":74},{"file":"SKILL.md","line_end":88,"line_start":82},{"file":"SKILL.md","line_end":92,"line_start":88},{"file":"SKILL.md","line_end":119,"line_start":92},{"file":"SKILL.md","line_end":132,"line_start":119},{"file":"SKILL.md","line_end":144,"line_start":132},{"file":"SKILL.md","line_end":161,"line_start":144},{"file":"SKILL.md","line_end":174,"line_start":161},{"file":"SKILL.md","line_end":181,"line_start":174},{"file":"SKILL.md","line_end":187,"line_start":181},{"file":"SKILL.md","line_end":190,"line_start":187},{"file":"SKILL.md","line_end":196,"line_start":190},{"file":"SKILL.md","line_end":199,"line_start":196},{"file":"SKILL.md","line_end":219,"line_start":199}]}],"critical_findings":[],"high_findings":[{"title":"Arbitrary URL Fetch Allows SSRF","locations":[{"file":"scripts/seo_audit.py","line_end":20,"line_start":18},{"file":"scripts/seo_audit.py","line_end":102,"line_start":91}],"confidence":0.97,"description":"The audit passes an unrestricted URL to urllib. A caller can target loopback, link-local, private, or redirected internal HTTP services and expose parsed page data.","review_kind":"security","source_category":"semantic","source_severity":"high","confidence_reasoning":"The command-line URL flows directly into urllib.request.urlopen without scheme, DNS, private-address, redirect, or response-size validation."}],"medium_findings":[],"low_findings":[{"title":"Hardcoded URL","locations":[{"file":"references/seo-checklist.md","line_end":217,"line_start":217}],"confidence":0.96,"description":"curl -sL \"https://example.com\" | grep -E \"<title>|<meta\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/seo-checklist.md","line_end":220,"line_start":220}],"confidence":0.96,"description":"curl -s \"https://example.com/robots.txt\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/seo-checklist.md","line_end":223,"line_start":223}],"confidence":0.96,"description":"curl -s \"https://example.com/sitemap.xml\" | head -30","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/seo-checklist.md","line_end":227,"line_start":227}],"confidence":0.96,"description":"curl \"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://example.com&strategy=mo","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/tools-and-apis.md","line_end":140,"line_start":140}],"confidence":0.96,"description":"curl -sL \"https://example.com\" | grep -E \"<title>|<meta\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/tools-and-apis.md","line_end":143,"line_start":143}],"confidence":0.96,"description":"curl -s \"https://example.com/robots.txt\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/tools-and-apis.md","line_end":146,"line_start":146}],"confidence":0.96,"description":"curl -s \"https://example.com/sitemap.xml\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/tools-and-apis.md","line_end":149,"line_start":149}],"confidence":0.96,"description":"curl -I \"https://example.com\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/tools-and-apis.md","line_end":152,"line_start":152}],"confidence":0.96,"description":"curl -sIL \"https://example.com\" | grep -E \"HTTP|Location\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/tools-and-apis.md","line_end":155,"line_start":155}],"confidence":0.96,"description":"curl -sL \"https://example.com\" | wc -c","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/tools-and-apis.md","line_end":158,"line_start":158}],"confidence":0.96,"description":"curl -o /dev/null -s -w \"Total: %{time_total}s\\n\" \"https://example.com\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/tools-and-apis.md","line_end":165,"line_start":165}],"confidence":0.96,"description":"curl \"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://example.com\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/tools-and-apis.md","line_end":168,"line_start":168}],"confidence":0.96,"description":"curl \"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://example.com&key=YOUR_AP","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"references/tools-and-apis.md","line_end":224,"line_start":224}],"confidence":0.96,"description":"python3 scripts/seo_audit.py \"https://example.com\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Python environment access","locations":[{"file":"scripts/credential.py","line_end":10,"line_start":10}],"confidence":0.98,"description":"login = os.environ.get(\"DATAFORSEO_LOGIN\")","review_kind":"capability","source_category":"env_access","source_severity":"low","confidence_reasoning":"The helper reads a purpose-specific DataForSEO credential from the environment. This is expected authentication behavior, but it is real secret access."},{"title":"Python environment access","locations":[{"file":"scripts/credential.py","line_end":11,"line_start":11}],"confidence":0.98,"description":"password = os.environ.get(\"DATAFORSEO_PASSWORD\")","review_kind":"capability","source_category":"env_access","source_severity":"low","confidence_reasoning":"The helper reads a purpose-specific DataForSEO credential from the environment. This is expected authentication behavior, but it is real secret access."},{"title":"Python HTTP libraries","locations":[{"file":"scripts/dataforseo_api.py","line_end":5,"line_start":5}],"confidence":0.98,"description":"import urllib.request","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real."},{"title":"Python HTTP libraries","locations":[{"file":"scripts/dataforseo_api.py","line_end":31,"line_start":31}],"confidence":0.98,"description":"req = urllib.request.Request(","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real."},{"title":"Python HTTP libraries","locations":[{"file":"scripts/dataforseo_api.py","line_end":39,"line_start":39}],"confidence":0.98,"description":"with urllib.request.urlopen(req, timeout=60) as resp:","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real."},{"title":"Hardcoded URL","locations":[{"file":"scripts/dataforseo_api.py","line_end":12,"line_start":12}],"confidence":0.98,"description":"API_BASE = \"https://api.dataforseo.com/v3\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real."},{"title":"Python HTTP libraries","locations":[{"file":"scripts/seo_audit.py","line_end":7,"line_start":7}],"confidence":0.99,"description":"import urllib.request","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The audit client fetches a user-supplied URL through urllib. This is intended network behavior, but the destination is not restricted to public addresses."},{"title":"Python HTTP libraries","locations":[{"file":"scripts/seo_audit.py","line_end":18,"line_start":18}],"confidence":0.99,"description":"req = urllib.request.Request(url, headers={\"User-Agent\": \"SEO-Audit/1.0\"})","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The audit client fetches a user-supplied URL through urllib. This is intended network behavior, but the destination is not restricted to public addresses."},{"title":"Python HTTP libraries","locations":[{"file":"scripts/seo_audit.py","line_end":19,"line_start":19}],"confidence":0.99,"description":"with urllib.request.urlopen(req, timeout=timeout) as resp:","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The audit client fetches a user-supplied URL through urllib. This is intended network behavior, but the destination is not restricted to public addresses."},{"title":"Hardcoded URL","locations":[{"file":"scripts/seo_audit.py","line_end":96,"line_start":96}],"confidence":0.99,"description":"url = f\"https://{url}\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The audit client fetches a user-supplied URL through urllib. This is intended network behavior, but the destination is not restricted to public addresses."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":42,"line_start":42}],"confidence":0.96,"description":"python3 scripts/seo_audit.py \"https://example.com\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":50,"line_start":50}],"confidence":0.96,"description":"curl -sL \"https://example.com\" | grep -E \"<title>|<meta name=\\\"description\\\"|<meta property=\\\"og:|ap","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":59,"line_start":59}],"confidence":0.96,"description":"curl -s \"https://example.com/robots.txt\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":68,"line_start":68}],"confidence":0.96,"description":"curl -s \"https://example.com/sitemap.xml\" | head -50","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":183,"line_start":183}],"confidence":0.96,"description":"open \"https://search.google.com/test/rich-results?url={encoded_url}\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":186,"line_start":186}],"confidence":0.96,"description":"open \"https://validator.schema.org/?url={encoded_url}\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":192,"line_start":192}],"confidence":0.96,"description":"open \"https://www.google.com/search?q=site:{domain}\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":195,"line_start":195}],"confidence":0.96,"description":"open \"https://www.bing.com/search?q=site:{domain}\"","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization."}],"dangerous_patterns":[],"files_scanned":18,"total_lines":3098,"audit_model":"codex","audited_at":"2026-07-23T18:25:00.381+00:00","created_at":"2026-07-25T23:50:30.88822+00:00","static_findings":[{"id":"network:examples/opc-skills-case-study.md:89:hardcoded-url","file":"examples/opc-skills-case-study.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":89,"severity":"low","line_start":89},{"id":"blocker:examples/opc-skills-case-study.md:290:network-reconnaissance","file":"examples/opc-skills-case-study.md","pattern":"Network reconnaissance","snippet":"- [ ] Monitor indexing progress","category":"blocker","line_end":291,"severity":"low","line_start":290},{"id":"blocker:references/geo-research.md:174:system-reconnaissance","file":"references/geo-research.md","pattern":"System reconnaissance","snippet":"- Avoid repetitive phrasing","category":"blocker","line_end":174,"severity":"low","line_start":174},{"id":"blocker:references/geo-research.md:234:system-reconnaissance","file":"references/geo-research.md","pattern":"System reconnaissance","snippet":"| Domain | Best Methods | Avoid |","category":"blocker","line_end":234,"severity":"low","line_start":234},{"id":"network:references/platform-algorithms.md:102:hardcoded-url","file":"references/platform-algorithms.md","pattern":"Hardcoded URL","snippet":"Sitemap: https://example.com/sitemap.xml","category":"network","line_end":102,"severity":"low","line_start":102},{"id":"network:references/schema-templates.md:13:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":13,"severity":"low","line_start":13},{"id":"network:references/schema-templates.md:68:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":68,"severity":"low","line_start":68},{"id":"network:references/schema-templates.md:72:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com/page\",","category":"network","line_end":72,"severity":"low","line_start":72},{"id":"network:references/schema-templates.md:79:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com\"","category":"network","line_end":79,"severity":"low","line_start":79},{"id":"network:references/schema-templates.md:84:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com/about\"","category":"network","line_end":84,"severity":"low","line_start":84},{"id":"network:references/schema-templates.md:91:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com/logo.png\"","category":"network","line_end":91,"severity":"low","line_start":91},{"id":"network:references/schema-templates.md:109:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":109,"severity":"low","line_start":109},{"id":"network:references/schema-templates.md:114:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"https://example.com/image-1x1.jpg\",","category":"network","line_end":114,"severity":"low","line_start":114},{"id":"network:references/schema-templates.md:115:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"https://example.com/image-4x3.jpg\",","category":"network","line_end":115,"severity":"low","line_start":115},{"id":"network:references/schema-templates.md:116:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"https://example.com/image-16x9.jpg\"","category":"network","line_end":116,"severity":"low","line_start":116},{"id":"network:references/schema-templates.md:123:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com/author/name\",","category":"network","line_end":123,"severity":"low","line_start":123},{"id":"network:references/schema-templates.md:135:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com/logo.png\",","category":"network","line_end":135,"severity":"low","line_start":135},{"id":"network:references/schema-templates.md:142:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@id\": \"https://example.com/article-url\"","category":"network","line_end":142,"severity":"low","line_start":142},{"id":"network:references/schema-templates.md:158:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":158,"severity":"low","line_start":158},{"id":"network:references/schema-templates.md:164:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com\",","category":"network","line_end":164,"severity":"low","line_start":164},{"id":"network:references/schema-templates.md:165:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"downloadUrl\": \"https://example.com/download\",","category":"network","line_end":165,"severity":"low","line_start":165},{"id":"network:references/schema-templates.md:167:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"releaseNotes\": \"https://example.com/changelog\",","category":"network","line_end":167,"severity":"low","line_start":167},{"id":"network:references/schema-templates.md:168:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"screenshot\": \"https://example.com/screenshot.png\",","category":"network","line_end":168,"severity":"low","line_start":168},{"id":"network:references/schema-templates.md:178:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"availability\": \"https://schema.org/InStock\"","category":"network","line_end":178,"severity":"low","line_start":178},{"id":"network:references/schema-templates.md:190:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com\"","category":"network","line_end":190,"severity":"low","line_start":190},{"id":"network:references/schema-templates.md:203:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":203,"severity":"low","line_start":203},{"id":"network:references/schema-templates.md:207:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com\",","category":"network","line_end":207,"severity":"low","line_start":207},{"id":"network:references/schema-templates.md:208:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"logo\": \"https://example.com/logo.png\",","category":"network","line_end":208,"severity":"low","line_start":208},{"id":"network:references/schema-templates.md:229:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"https://twitter.com/example\",","category":"network","line_end":229,"severity":"low","line_start":229},{"id":"network:references/schema-templates.md:230:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"https://github.com/example\",","category":"network","line_end":230,"severity":"low","line_start":230},{"id":"network:references/schema-templates.md:231:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"https://linkedin.com/company/example\"","category":"network","line_end":231,"severity":"low","line_start":231},{"id":"network:references/schema-templates.md:244:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":244,"severity":"low","line_start":244},{"id":"network:references/schema-templates.md:249:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"https://example.com/product-image-1.jpg\",","category":"network","line_end":249,"severity":"low","line_start":249},{"id":"network:references/schema-templates.md:250:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"https://example.com/product-image-2.jpg\"","category":"network","line_end":250,"severity":"low","line_start":250},{"id":"network:references/schema-templates.md:259:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com/product\",","category":"network","line_end":259,"severity":"low","line_start":259},{"id":"network:references/schema-templates.md:263:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"availability\": \"https://schema.org/InStock\",","category":"network","line_end":263,"severity":"low","line_start":263},{"id":"network:references/schema-templates.md:300:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":300,"severity":"low","line_start":300},{"id":"network:references/schema-templates.md:304:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"image\": \"https://example.com/how-to-image.jpg\",","category":"network","line_end":304,"severity":"low","line_start":304},{"id":"network:references/schema-templates.md:328:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"image\": \"https://example.com/step-1.jpg\",","category":"network","line_end":328,"severity":"low","line_start":328},{"id":"network:references/schema-templates.md:329:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com/guide#step1\"","category":"network","line_end":329,"severity":"low","line_start":329},{"id":"network:references/schema-templates.md:335:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"image\": \"https://example.com/step-2.jpg\",","category":"network","line_end":335,"severity":"low","line_start":335},{"id":"network:references/schema-templates.md:336:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com/guide#step2\"","category":"network","line_end":336,"severity":"low","line_start":336},{"id":"network:references/schema-templates.md:342:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"image\": \"https://example.com/step-3.jpg\",","category":"network","line_end":342,"severity":"low","line_start":342},{"id":"network:references/schema-templates.md:343:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com/guide#step3\"","category":"network","line_end":343,"severity":"low","line_start":343},{"id":"network:references/schema-templates.md:357:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":357,"severity":"low","line_start":357},{"id":"network:references/schema-templates.md:364:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"item\": \"https://example.com\"","category":"network","line_end":364,"severity":"low","line_start":364},{"id":"network:references/schema-templates.md:370:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"item\": \"https://example.com/category\"","category":"network","line_end":370,"severity":"low","line_start":370},{"id":"network:references/schema-templates.md:376:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"item\": \"https://example.com/category/page\"","category":"network","line_end":376,"severity":"low","line_start":376},{"id":"network:references/schema-templates.md:390:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":390,"severity":"low","line_start":390},{"id":"network:references/schema-templates.md:394:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"image\": \"https://example.com/business-image.jpg\",","category":"network","line_end":394,"severity":"low","line_start":394},{"id":"network:references/schema-templates.md:395:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://example.com\",","category":"network","line_end":395,"severity":"low","line_start":395},{"id":"network:references/schema-templates.md:431:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":431,"severity":"low","line_start":431},{"id":"network:references/schema-templates.md:454:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":454,"severity":"low","line_start":454},{"id":"network:references/schema-templates.md:460:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://opc.dev\",","category":"network","line_end":460,"severity":"low","line_start":460},{"id":"network:references/schema-templates.md:494:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"url\": \"https://opc.dev\",","category":"network","line_end":494,"severity":"low","line_start":494},{"id":"network:references/schema-templates.md:495:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"\"sameAs\": [\"https://github.com/ReScienceLab/opc-skills\"]","category":"network","line_end":495,"severity":"low","line_start":495},{"id":"network:references/schema-templates.md:507:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"https://search.google.com/test/rich-results?url={your-url}","category":"network","line_end":507,"severity":"low","line_start":507},{"id":"network:references/schema-templates.md:512:hardcoded-url","file":"references/schema-templates.md","pattern":"Hardcoded URL","snippet":"https://validator.schema.org/?url={your-url}","category":"network","line_end":512,"severity":"low","line_start":512},{"id":"sensitive:references/schema-templates.md:96:certificate-key-files","file":"references/schema-templates.md","pattern":"Certificate/key files","snippet":"\"cssSelector\": [\"h1\", \".summary\", \".key-points\"]","category":"sensitive","line_end":96,"severity":"high","line_start":96},{"id":"sensitive:references/schema-templates.md:439:certificate-key-files","file":"references/schema-templates.md","pattern":"Certificate/key files","snippet":"\".key-takeaways\",","category":"sensitive","line_end":439,"severity":"high","line_start":439},{"id":"blocker:references/schema-templates.md:53:pipe-to-shell-pattern","file":"references/schema-templates.md","pattern":"Pipe to shell pattern","snippet":"\"text\": \"[Installation/signup instructions. Run: curl -fsSL example.com/install.sh | bash]\"","category":"blocker","line_end":53,"severity":"critical","line_start":53},{"id":"network:references/seo-checklist.md:217:hardcoded-url","file":"references/seo-checklist.md","pattern":"Hardcoded URL","snippet":"curl -sL \"https://example.com\" | grep -E \"<title>|<meta\"","category":"network","line_end":217,"severity":"low","line_start":217},{"id":"network:references/seo-checklist.md:220:hardcoded-url","file":"references/seo-checklist.md","pattern":"Hardcoded URL","snippet":"curl -s \"https://example.com/robots.txt\"","category":"network","line_end":220,"severity":"low","line_start":220},{"id":"network:references/seo-checklist.md:223:hardcoded-url","file":"references/seo-checklist.md","pattern":"Hardcoded URL","snippet":"curl -s \"https://example.com/sitemap.xml\" | head -30","category":"network","line_end":223,"severity":"low","line_start":223},{"id":"network:references/seo-checklist.md:227:hardcoded-url","file":"references/seo-checklist.md","pattern":"Hardcoded URL","snippet":"curl \"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://example.com&strategy=mo","category":"network","line_end":227,"severity":"low","line_start":227},{"id":"network:references/seo-checklist.md:230:hardcoded-url","file":"references/seo-checklist.md","pattern":"Hardcoded URL","snippet":"# Manual check: https://www.google.com/search?q=site:example.com","category":"network","line_end":230,"severity":"low","line_start":230},{"id":"network:references/seo-checklist.md:233:hardcoded-url","file":"references/seo-checklist.md","pattern":"Hardcoded URL","snippet":"# Open: https://search.google.com/test/rich-results?url=https://example.com","category":"network","line_end":233,"severity":"low","line_start":233},{"id":"blocker:references/seo-checklist.md:21:system-reconnaissance","file":"references/seo-checklist.md","pattern":"System reconnaissance","snippet":"- [ ] **P0** HTTPS enabled (valid SSL certificate)","category":"blocker","line_end":21,"severity":"low","line_start":21},{"id":"blocker:references/seo-checklist.md:137:network-reconnaissance","file":"references/seo-checklist.md","pattern":"Network reconnaissance","snippet":"### AI Bot Access","category":"blocker","line_end":139,"severity":"low","line_start":137},{"id":"network:references/tools-and-apis.md:140:hardcoded-url","file":"references/tools-and-apis.md","pattern":"Hardcoded URL","snippet":"curl -sL \"https://example.com\" | grep -E \"<title>|<meta\"","category":"network","line_end":140,"severity":"low","line_start":140},{"id":"network:references/tools-and-apis.md:143:hardcoded-url","file":"references/tools-and-apis.md","pattern":"Hardcoded URL","snippet":"curl -s \"https://example.com/robots.txt\"","category":"network","line_end":143,"severity":"low","line_start":143},{"id":"network:references/tools-and-apis.md:146:hardcoded-url","file":"references/tools-and-apis.md","pattern":"Hardcoded URL","snippet":"curl -s \"https://example.com/sitemap.xml\"","category":"network","line_end":146,"severity":"low","line_start":146},{"id":"network:references/tools-and-apis.md:149:hardcoded-url","file":"references/tools-and-apis.md","pattern":"Hardcoded URL","snippet":"curl -I \"https://example.com\"","category":"network","line_end":149,"severity":"low","line_start":149},{"id":"network:references/tools-and-apis.md:152:hardcoded-url","file":"references/tools-and-apis.md","pattern":"Hardcoded URL","snippet":"curl -sIL \"https://example.com\" | grep -E \"HTTP|Location\"","category":"network","line_end":152,"severity":"low","line_start":152},{"id":"network:references/tools-and-apis.md:155:hardcoded-url","file":"references/tools-and-apis.md","pattern":"Hardcoded URL","snippet":"curl -sL \"https://example.com\" | wc -c","category":"network","line_end":155,"severity":"low","line_start":155},{"id":"network:references/tools-and-apis.md:158:hardcoded-url","file":"references/tools-and-apis.md","pattern":"Hardcoded URL","snippet":"curl -o /dev/null -s -w \"Total: %{time_total}s\\n\" \"https://example.com\"","category":"network","line_end":158,"severity":"low","line_start":158},{"id":"network:references/tools-and-apis.md:165:hardcoded-url","file":"references/tools-and-apis.md","pattern":"Hardcoded URL","snippet":"curl \"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://example.com\"","category":"network","line_end":165,"severity":"low","line_start":165},{"id":"network:references/tools-and-apis.md:168:hardcoded-url","file":"references/tools-and-apis.md","pattern":"Hardcoded URL","snippet":"curl \"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://example.com&key=YOUR_AP","category":"network","line_end":168,"severity":"low","line_start":168},{"id":"network:references/tools-and-apis.md:203:hardcoded-url","file":"references/tools-and-apis.md","pattern":"Hardcoded URL","snippet":"Sitemap: https://example.com/sitemap.xml","category":"network","line_end":203,"severity":"low","line_start":203},{"id":"network:references/tools-and-apis.md:224:hardcoded-url","file":"references/tools-and-apis.md","pattern":"Hardcoded URL","snippet":"python3 scripts/seo_audit.py \"https://example.com\"","category":"network","line_end":224,"severity":"low","line_start":224},{"id":"filesystem:references/tools-and-apis.md:158:standard-device-file-access","file":"references/tools-and-apis.md","pattern":"Standard device file access","snippet":"curl -o /dev/null -s -w \"Total: %{time_total}s\\n\" \"https://example.com\"","category":"filesystem","line_end":158,"severity":"low","line_start":158},{"id":"env_access:references/tools-and-apis.md:168:generic-api-secret-keys","file":"references/tools-and-apis.md","pattern":"Generic API/secret keys","snippet":"curl \"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://example.com&key=YOUR_AP","category":"env_access","line_end":168,"severity":"high","line_start":168},{"id":"blocker:references/tools-and-apis.md:38:system-reconnaissance","file":"references/tools-and-apis.md","pattern":"System reconnaissance","snippet":"## Paid SEO Tools","category":"blocker","line_end":38,"severity":"low","line_start":38},{"id":"sensitive:scripts/autocomplete_ideas.py:20:certificate-key-files","file":"scripts/autocomplete_ideas.py","pattern":"Certificate/key files","snippet":"\"keyword\": args.keyword,","category":"sensitive","line_end":20,"severity":"high","line_start":20},{"id":"sensitive:scripts/autocomplete_ideas.py:28:certificate-key-files","file":"scripts/autocomplete_ideas.py","pattern":"Certificate/key files","snippet":"print(f\"keyword: {args.keyword}\")","category":"sensitive","line_end":28,"severity":"high","line_start":28},{"id":"env_access:scripts/credential.py:10:python-environment-access","file":"scripts/credential.py","pattern":"Python environment access","snippet":"login = os.environ.get(\"DATAFORSEO_LOGIN\")","category":"env_access","line_end":10,"severity":"low","line_start":10},{"id":"env_access:scripts/credential.py:11:python-environment-access","file":"scripts/credential.py","pattern":"Python environment access","snippet":"password = os.environ.get(\"DATAFORSEO_PASSWORD\")","category":"env_access","line_end":11,"severity":"low","line_start":11},{"id":"network:scripts/dataforseo_api.py:5:python-http-libraries","file":"scripts/dataforseo_api.py","pattern":"Python HTTP libraries","snippet":"import urllib.request","category":"network","line_end":5,"severity":"low","line_start":5},{"id":"network:scripts/dataforseo_api.py:31:python-http-libraries","file":"scripts/dataforseo_api.py","pattern":"Python HTTP libraries","snippet":"req = urllib.request.Request(","category":"network","line_end":31,"severity":"low","line_start":31},{"id":"network:scripts/dataforseo_api.py:39:python-http-libraries","file":"scripts/dataforseo_api.py","pattern":"Python HTTP libraries","snippet":"with urllib.request.urlopen(req, timeout=60) as resp:","category":"network","line_end":39,"severity":"low","line_start":39},{"id":"network:scripts/dataforseo_api.py:12:hardcoded-url","file":"scripts/dataforseo_api.py","pattern":"Hardcoded URL","snippet":"API_BASE = \"https://api.dataforseo.com/v3\"","category":"network","line_end":12,"severity":"low","line_start":12},{"id":"sensitive:scripts/keyword_research.py:19:certificate-key-files","file":"scripts/keyword_research.py","pattern":"Certificate/key files","snippet":"\"keywords\": [args.keyword],  # API requires 'keywords' array (up to 20)","category":"sensitive","line_end":19,"severity":"high","line_start":19},{"id":"sensitive:scripts/keyword_research.py:28:certificate-key-files","file":"scripts/keyword_research.py","pattern":"Certificate/key files","snippet":"print(f\"keyword: {args.keyword}\")","category":"sensitive","line_end":28,"severity":"high","line_start":28},{"id":"sensitive:scripts/related_keywords.py:29:certificate-key-files","file":"scripts/related_keywords.py","pattern":"Certificate/key files","snippet":"\"keyword\": args.keyword,","category":"sensitive","line_end":29,"severity":"high","line_start":29},{"id":"sensitive:scripts/related_keywords.py:39:certificate-key-files","file":"scripts/related_keywords.py","pattern":"Certificate/key files","snippet":"print(f\"keyword: {args.keyword}\")","category":"sensitive","line_end":39,"severity":"high","line_start":39},{"id":"network:scripts/seo_audit.py:7:python-http-libraries","file":"scripts/seo_audit.py","pattern":"Python HTTP libraries","snippet":"import urllib.request","category":"network","line_end":7,"severity":"low","line_start":7},{"id":"network:scripts/seo_audit.py:18:python-http-libraries","file":"scripts/seo_audit.py","pattern":"Python HTTP libraries","snippet":"req = urllib.request.Request(url, headers={\"User-Agent\": \"SEO-Audit/1.0\"})","category":"network","line_end":18,"severity":"low","line_start":18},{"id":"network:scripts/seo_audit.py:19:python-http-libraries","file":"scripts/seo_audit.py","pattern":"Python HTTP libraries","snippet":"with urllib.request.urlopen(req, timeout=timeout) as resp:","category":"network","line_end":19,"severity":"low","line_start":19},{"id":"network:scripts/seo_audit.py:4:hardcoded-url","file":"scripts/seo_audit.py","pattern":"Hardcoded URL","snippet":"Usage: python3 scripts/seo_audit.py \"https://example.com\"","category":"network","line_end":4,"severity":"low","line_start":4},{"id":"network:scripts/seo_audit.py:96:hardcoded-url","file":"scripts/seo_audit.py","pattern":"Hardcoded URL","snippet":"url = f\"https://{url}\"","category":"network","line_end":96,"severity":"low","line_start":96},{"id":"sensitive:scripts/serp_analysis.py:19:certificate-key-files","file":"scripts/serp_analysis.py","pattern":"Certificate/key files","snippet":"\"keyword\": args.keyword,","category":"sensitive","line_end":19,"severity":"high","line_start":19},{"id":"sensitive:scripts/serp_analysis.py:28:certificate-key-files","file":"scripts/serp_analysis.py","pattern":"Certificate/key files","snippet":"print(f\"keyword: {args.keyword}\")","category":"sensitive","line_end":28,"severity":"high","line_start":28},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":43,"severity":"medium","line_start":41},{"id":"external_commands:SKILL.md:43:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":49,"severity":"medium","line_start":43},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":51,"severity":"medium","line_start":49},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":58,"severity":"medium","line_start":51},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":60,"severity":"medium","line_start":58},{"id":"external_commands:SKILL.md:60:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":67,"severity":"medium","line_start":60},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":69,"severity":"medium","line_start":67},{"id":"external_commands:SKILL.md:69:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":74,"severity":"medium","line_start":69},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":82,"severity":"medium","line_start":74},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":88,"severity":"medium","line_start":82},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":92,"severity":"medium","line_start":88},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":119,"severity":"medium","line_start":92},{"id":"external_commands:SKILL.md:119:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```json","category":"external_commands","line_end":132,"severity":"medium","line_start":119},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":144,"severity":"medium","line_start":132},{"id":"external_commands:SKILL.md:144:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```html","category":"external_commands","line_end":161,"severity":"medium","line_start":144},{"id":"external_commands:SKILL.md:161:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":174,"severity":"medium","line_start":161},{"id":"external_commands:SKILL.md:174:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- [ ] External links have `rel=\"noopener noreferrer\"`","category":"external_commands","line_end":181,"severity":"medium","line_start":174},{"id":"external_commands:SKILL.md:181:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":187,"severity":"medium","line_start":181},{"id":"external_commands:SKILL.md:187:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":190,"severity":"medium","line_start":187},{"id":"external_commands:SKILL.md:190:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":196,"severity":"medium","line_start":190},{"id":"external_commands:SKILL.md:196:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":199,"severity":"medium","line_start":196},{"id":"external_commands:SKILL.md:199:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```markdown","category":"external_commands","line_end":219,"severity":"medium","line_start":199},{"id":"network:SKILL.md:42:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"python3 scripts/seo_audit.py \"https://example.com\"","category":"network","line_end":42,"severity":"low","line_start":42},{"id":"network:SKILL.md:50:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"curl -sL \"https://example.com\" | grep -E \"<title>|<meta name=\\\"description\\\"|<meta property=\\\"og:|ap","category":"network","line_end":50,"severity":"low","line_start":50},{"id":"network:SKILL.md:59:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"curl -s \"https://example.com/robots.txt\"","category":"network","line_end":59,"severity":"low","line_start":59},{"id":"network:SKILL.md:68:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"curl -s \"https://example.com/sitemap.xml\" | head -50","category":"network","line_end":68,"severity":"low","line_start":68},{"id":"network:SKILL.md:121:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"\"@context\": \"https://schema.org\",","category":"network","line_end":121,"severity":"low","line_start":121},{"id":"network:SKILL.md:183:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"open \"https://search.google.com/test/rich-results?url={encoded_url}\"","category":"network","line_end":183,"severity":"low","line_start":183},{"id":"network:SKILL.md:186:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"open \"https://validator.schema.org/?url={encoded_url}\"","category":"network","line_end":186,"severity":"low","line_start":186},{"id":"network:SKILL.md:192:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"open \"https://www.google.com/search?q=site:{domain}\"","category":"network","line_end":192,"severity":"low","line_start":192},{"id":"network:SKILL.md:195:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"open \"https://www.bing.com/search?q=site:{domain}\"","category":"network","line_end":195,"severity":"low","line_start":195}],"finding_verdicts":[{"id":"network:examples/opc-skills-case-study.md:89:hardcoded-url","reason":"The URL appears as documentation, a placeholder, or structured-data text. This finding does not represent an automatic or hidden network request.","verdict":"false_positive","confidence":0.98},{"id":"blocker:examples/opc-skills-case-study.md:290:network-reconnaissance","reason":"The matched text is ordinary SEO prose or a checklist heading. It contains no reconnaissance command, scanning logic, or hostile intent.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/geo-research.md:174:system-reconnaissance","reason":"The matched text is ordinary SEO prose or a checklist heading. It contains no reconnaissance command, scanning logic, or hostile intent.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/geo-research.md:234:system-reconnaissance","reason":"The matched text is ordinary SEO prose or a checklist heading. It contains no reconnaissance command, scanning logic, or hostile intent.","verdict":"false_positive","confidence":0.99},{"id":"network:references/platform-algorithms.md:102:hardcoded-url","reason":"The URL appears as documentation, a placeholder, or structured-data text. This finding does not represent an automatic or hidden network request.","verdict":"false_positive","confidence":0.98},{"id":"network:references/schema-templates.md:13:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:68:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:72:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:79:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:84:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:91:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:109:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:114:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:115:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:116:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:123:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:135:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:142:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:158:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:164:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:165:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:167:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:168:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:178:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:190:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:203:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:207:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:208:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:229:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:230:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:231:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:244:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:249:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:250:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:259:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:263:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:300:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:304:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:328:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:329:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:335:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:336:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:342:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:343:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:357:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:364:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:370:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:376:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:390:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:394:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:395:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:431:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:454:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:460:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:494:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:495:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:507:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"network:references/schema-templates.md:512:hardcoded-url","reason":"The URL is structured-data content using a standards namespace, reserved example domain, or named validator. It does not initiate a network request.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:references/schema-templates.md:96:certificate-key-files","reason":"The match is a CSS class or the ordinary SEO term keyword. No certificate, private key, or key-file access is present.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:references/schema-templates.md:439:certificate-key-files","reason":"The match is a CSS class or the ordinary SEO term keyword. No certificate, private key, or key-file access is present.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/schema-templates.md:53:pipe-to-shell-pattern","reason":"The pipe-to-shell text is quoted placeholder content inside a JSON-LD FAQ answer. The skill does not execute that string.","verdict":"false_positive","confidence":0.98},{"id":"network:references/seo-checklist.md:217:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/seo-checklist.md:220:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/seo-checklist.md:223:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/seo-checklist.md:227:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/seo-checklist.md:230:hardcoded-url","reason":"The URL appears as documentation, a placeholder, or structured-data text. This finding does not represent an automatic or hidden network request.","verdict":"false_positive","confidence":0.98},{"id":"network:references/seo-checklist.md:233:hardcoded-url","reason":"The URL appears as documentation, a placeholder, or structured-data text. This finding does not represent an automatic or hidden network request.","verdict":"false_positive","confidence":0.98},{"id":"blocker:references/seo-checklist.md:21:system-reconnaissance","reason":"The matched text is ordinary SEO prose or a checklist heading. It contains no reconnaissance command, scanning logic, or hostile intent.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/seo-checklist.md:137:network-reconnaissance","reason":"The matched text is ordinary SEO prose or a checklist heading. It contains no reconnaissance command, scanning logic, or hostile intent.","verdict":"false_positive","confidence":0.99},{"id":"network:references/tools-and-apis.md:140:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/tools-and-apis.md:143:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/tools-and-apis.md:146:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/tools-and-apis.md:149:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/tools-and-apis.md:152:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/tools-and-apis.md:155:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/tools-and-apis.md:158:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/tools-and-apis.md:165:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/tools-and-apis.md:168:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:references/tools-and-apis.md:203:hardcoded-url","reason":"The URL appears as documentation, a placeholder, or structured-data text. This finding does not represent an automatic or hidden network request.","verdict":"false_positive","confidence":0.98},{"id":"network:references/tools-and-apis.md:224:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"filesystem:references/tools-and-apis.md:158:standard-device-file-access","reason":"The command sends curl output to /dev/null only to measure timing. It does not read a device or access user files.","verdict":"false_positive","confidence":0.99},{"id":"env_access:references/tools-and-apis.md:168:generic-api-secret-keys","reason":"The documentation contains the placeholder YOUR_API_KEY, not a stored credential or environment access. No secret value is included.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/tools-and-apis.md:38:system-reconnaissance","reason":"The matched text is ordinary SEO prose or a checklist heading. It contains no reconnaissance command, scanning logic, or hostile intent.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/autocomplete_ideas.py:20:certificate-key-files","reason":"The match is a CSS class or the ordinary SEO term keyword. No certificate, private key, or key-file access is present.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/autocomplete_ideas.py:28:certificate-key-files","reason":"The match is a CSS class or the ordinary SEO term keyword. No certificate, private key, or key-file access is present.","verdict":"false_positive","confidence":0.99},{"id":"env_access:scripts/credential.py:10:python-environment-access","reason":"The helper reads a purpose-specific DataForSEO credential from the environment. This is expected authentication behavior, but it is real secret access.","verdict":"confirmed","severity":"low","confidence":0.98},{"id":"env_access:scripts/credential.py:11:python-environment-access","reason":"The helper reads a purpose-specific DataForSEO credential from the environment. This is expected authentication behavior, but it is real secret access.","verdict":"confirmed","severity":"low","confidence":0.98},{"id":"network:scripts/dataforseo_api.py:5:python-http-libraries","reason":"This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real.","verdict":"confirmed","severity":"low","confidence":0.98},{"id":"network:scripts/dataforseo_api.py:31:python-http-libraries","reason":"This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real.","verdict":"confirmed","severity":"low","confidence":0.98},{"id":"network:scripts/dataforseo_api.py:39:python-http-libraries","reason":"This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real.","verdict":"confirmed","severity":"low","confidence":0.98},{"id":"network:scripts/dataforseo_api.py:12:hardcoded-url","reason":"This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real.","verdict":"confirmed","severity":"low","confidence":0.98},{"id":"sensitive:scripts/keyword_research.py:19:certificate-key-files","reason":"The match is a CSS class or the ordinary SEO term keyword. No certificate, private key, or key-file access is present.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/keyword_research.py:28:certificate-key-files","reason":"The match is a CSS class or the ordinary SEO term keyword. No certificate, private key, or key-file access is present.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/related_keywords.py:29:certificate-key-files","reason":"The match is a CSS class or the ordinary SEO term keyword. No certificate, private key, or key-file access is present.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/related_keywords.py:39:certificate-key-files","reason":"The match is a CSS class or the ordinary SEO term keyword. No certificate, private key, or key-file access is present.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/seo_audit.py:7:python-http-libraries","reason":"The audit client fetches a user-supplied URL through urllib. This is intended network behavior, but the destination is not restricted to public addresses.","verdict":"confirmed","severity":"low","confidence":0.99},{"id":"network:scripts/seo_audit.py:18:python-http-libraries","reason":"The audit client fetches a user-supplied URL through urllib. This is intended network behavior, but the destination is not restricted to public addresses.","verdict":"confirmed","severity":"low","confidence":0.99},{"id":"network:scripts/seo_audit.py:19:python-http-libraries","reason":"The audit client fetches a user-supplied URL through urllib. This is intended network behavior, but the destination is not restricted to public addresses.","verdict":"confirmed","severity":"low","confidence":0.99},{"id":"network:scripts/seo_audit.py:4:hardcoded-url","reason":"This is a usage example containing the reserved example.com domain. The line itself performs no request.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/seo_audit.py:96:hardcoded-url","reason":"The audit client fetches a user-supplied URL through urllib. This is intended network behavior, but the destination is not restricted to public addresses.","verdict":"confirmed","severity":"low","confidence":0.99},{"id":"sensitive:scripts/serp_analysis.py:19:certificate-key-files","reason":"The match is a CSS class or the ordinary SEO term keyword. No certificate, private key, or key-file access is present.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/serp_analysis.py:28:certificate-key-files","reason":"The match is a CSS class or the ordinary SEO term keyword. No certificate, private key, or key-file access is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:43:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:60:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:69:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:119:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:144:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:161:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:174:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:181:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:187:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:190:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:196:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:199:ruby-shell-backtick-execution","reason":"The detector matched Markdown fences or inline code formatting, not Ruby backtick execution or executable source.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:42:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:SKILL.md:50:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:SKILL.md:59:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:SKILL.md:68:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:SKILL.md:121:hardcoded-url","reason":"The URL appears as documentation, a placeholder, or structured-data text. This finding does not represent an automatic or hidden network request.","verdict":"false_positive","confidence":0.98},{"id":"network:SKILL.md:183:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:SKILL.md:186:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:SKILL.md:192:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96},{"id":"network:SKILL.md:195:hardcoded-url","reason":"This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.","verdict":"confirmed","severity":"low","confidence":0.96}],"semantic_findings":[{"title":"Arbitrary URL Fetch Allows SSRF","severity":"high","locations":[{"file":"scripts/seo_audit.py","line_end":20,"line_start":18},{"file":"scripts/seo_audit.py","line_end":102,"line_start":91}],"confidence":0.97,"description":"The audit passes an unrestricted URL to urllib. A caller can target loopback, link-local, private, or redirected internal HTTP services and expose parsed page data.","confidence_reasoning":"The command-line URL flows directly into urllib.request.urlopen without scheme, DNS, private-address, redirect, or response-size validation."}],"subject_marketplace_commit_sha":"ebdfe608f5de2b66ff37ab4af12af8ac4f5e8006","subject_content_hash":"1bcce31ac3d47f4d96c03fff8fab91b9e6b8d9f8ad8aeaba94da9be393301a4c","subject_tree_hash":"d661bcc3ff66bf3cb5c27ab923fba37108fdafe0743a70429d62e69d67e4dbb7","subject_plugin_path":"skills/resciencelab/seo-geo","audit_payload_hash":"84f73822867cd53bf13a6284abe8068b","confirmed_risk_level":"high","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"ebdfe608f5de2b66ff37ab4af12af8ac4f5e8006","contentHash":"1bcce31ac3d47f4d96c03fff8fab91b9e6b8d9f8ad8aeaba94da9be393301a4c","treeHash":"d661bcc3ff66bf3cb5c27ab923fba37108fdafe0743a70429d62e69d67e4dbb7","pluginPath":"skills/resciencelab/seo-geo","auditPayloadHash":"84f73822867cd53bf13a6284abe8068b"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/resciencelab-seo-geo/audits/5/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"high","confirmedFindingCount":1,"capabilityReviewCount":32,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"confirmation_required","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}