When to Use
- Diagnosing Content Security Policy (CSP) violations blocking extension functionality
- Troubleshooting cross-origin request failures in browser extensions
- Debugging extension permission issues
- Resolving conflicts between extensions and page security policies
- Investigating browser automation tool security warnings
When NOT to Use
- General Chrome debugging without security context
- Server-side security issues
- Mobile app security testing
Common Issues
Content Security Policy Violations
# Check page CSP headers
curl -sI https://example.com | grep -i "content-security-policy"
# Common CSP directives that block extensions
# script-src: blocks injected scripts
# connect-src: blocks fetch/XHR to extension URLs
# frame-src: blocks iframes from extensions
Fix approaches:
- Use
chrome.declarativeNetRequestto modify CSP headers - Use
world: "MAIN"for content scripts needing page context - Use message passing instead of direct DOM manipulation
Cross-Origin Issues
| Symptom | Cause | Fix |
|---|---|---|
| CORS error in extension | Missing host permission | Add origin to host_permissions in manifest |
| Blocked by CORB | Response MIME type mismatch | Use background script as proxy |
opaque response |
no-cors mode fetch |
Use cors mode with proper headers |
Extension Permission Problems
// manifest.json - common permission issues
{
"permissions": [
"activeTab", // Preferred over broad host access
"scripting", // Required for script injection
"storage" // For local extension data
],
"host_permissions": [
"https://specific-domain.com/*" // Prefer specific over <all_urls>
]
}
Debugging Steps
- Open
chrome://extensionsand check for errors - Inspect extension background/service worker console
- Check
chrome://net-internals/#eventsfor network issues - Review
chrome://policyfor enterprise-managed restrictions - Test in a clean profile to rule out extension conflicts
Security Best Practices for Extensions
- Request minimum required permissions
- Use
activeTabinstead of broad host permissions where possible - Validate all messages received via
chrome.runtime.onMessage - Sanitize any content injected into pages
- Use Content Security Policy in extension pages
- Avoid
eval()and inline scripts in extension code