T09 · Insecure Skill Coding Practices
- Location
playwright_test_generator.py:192- Finding
Unrestricted URL Analysis Enables Server-Side Request Forgery
- Content
View full analysis
str: """Generate test code from a URL.""" from playwright.sync_api import sync_playwright code_blocks = [] with sync_playwright() as p: browser = p.chromium.launch(headless=True) context = browser.new_context() page = context.new_page() try: page.goto(url, wait_until='domcontentloaded', timeout=30000) page.wait_for_timeout(1000) analyzer = PageAnalyzer(page) if pom: code_blocks.append(_generate_pom_code(analyzer, language)) else: code_blocks.append(_generate_test_code(analyzer, language)) finally: page.close() context.close() browser.close() return '\n\n'.join(code_blocks) ``` The JavaScript implementation has the same weakness: ```javascript async analyzeUrl(url, options = {}) { if (!url) throw new Error('URL is required for analyzeUrl'); const { mock = false } = options; if (mock) { return { url, title: 'Mock Page Title', locators: { 'main-heading': 'h1', 'login-form': '#login-form', 'username-input': '[data-testid="username-input"]', 'password-input': '[data-testid="password-input"]', 'submit-button': '[data-testid="submit-button"]' }, elements: [] }; } const { chromium } = await import('playwright'); const browser = await chromium.launch({ headless: true }); const page = await browser.newPage(); await page.goto(url, { waitUntil: 'domcontentloaded' }); const html = await page.content(); const title = await page.title() ...[truncated 2528 chars]- Remediation
View remediation
