Security Considerations for Scrape Module
Version: v1.1.9 | Last Updated: February 2026
Overview
This document outlines security considerations and best practices for using the scrape module. Web scraping involves accessing external resources and handling potentially sensitive data, so proper security measures are essential.
API Key Management
Secure Storage
- Never commit API keys to version control
- Store API keys in environment variables or secure configuration files
- Use
.envfiles with.gitignoreprotection - Consider using secret management services for production
Environment Variables
# Recommended: Use environment variables
export FIRECRAWL_API_KEY="fc-your-api-key"
# Or use .env file (ensure it's in .gitignore)
echo "FIRECRAWL_API_KEY=fc-your-api-key" >> .env
Programmatic Configuration
# Avoid hardcoding API keys
# BAD:
config = ScrapeConfig(api_key="fc-hardcoded-key")
# GOOD:
config = ScrapeConfig.from_env() # Reads from environment
Rate Limiting and Throttling
Respect Rate Limits
- Firecrawl and other providers have rate limits
- Implement appropriate delays between requests
- Monitor API usage to avoid exceeding limits
- Use
ScrapeConfig.rate_limitwhen available
Best Practices
import time
# Add delays between requests
for url in urls:
result = scraper.scrape(url)
time.sleep(1) # Respect rate limits
Robots.txt Compliance
Default Behavior
- The module respects
robots.txtby default (respect_robots_txt=True) - This is a legal and ethical best practice
- Only disable when you have explicit permission
Configuration
# Respect robots.txt (default)
options = ScrapeOptions(respect_robots_txt=True)
# Only disable if you have permission
options = ScrapeOptions(respect_robots_txt=False)
Legal and Ethical Considerations
Terms of Service
- Always review and comply with website Terms of Service
- Some websites explicitly prohibit scraping
- Obtain permission when required
- Use official APIs when available
Ethical Guidelines
- Respect website resources: Don't overload servers with excessive requests
- Respect privacy: Don't scrape personal information without consent
- Respect copyright: Don't redistribute scraped content without permission
- Be transparent: Identify your scraper with appropriate user agents
User Agent Identification
config = ScrapeConfig(
user_agent="MyApp/1.0 (Contact: your@email.com)",
respect_robots_txt=True,
)
Input Validation
URL Validation
- Always validate URLs before scraping
- Check for malicious URLs (e.g., file://, javascript:)
- Sanitize user-provided URLs
from urllib.parse import urlparse
def validate_url(url: str) -> bool:
parsed = urlparse(url)
return parsed.scheme in ('http', 'https') and parsed.netloc
Schema Validation
- Validate extraction schemas to prevent injection
- Limit schema complexity
- Sanitize prompts for LLM extraction
Error Handling
Information Disclosure
- Don't expose API keys in error messages
- Don't log sensitive data
- Use generic error messages for users
Exception Handling
try:
result = scraper.scrape(url)
except ScrapingError as e:
# Log detailed error internally
logger.error(f"Scraping failed: {e}", exc_info=True)
# Return generic message to user
raise ScrapingError("Failed to scrape URL") from e
Network Security
HTTPS Only
- Prefer HTTPS URLs when possible
- Validate SSL certificates
- Be cautious with self-signed certificates
Timeout Configuration
- Set appropriate timeouts to prevent hanging requests
- Use
ScrapeConfig.default_timeoutto limit request duration
config = ScrapeConfig(
default_timeout=30.0, # 30 second timeout
max_retries=3,
)
Data Handling
Sensitive Data
- Don't log scraped content that may contain sensitive information
- Encrypt stored scraped data if it contains PII
- Follow data retention policies
Content Sanitization
- Sanitize scraped HTML before processing
- Be cautious with JavaScript execution
- Validate extracted data before use
Dependency Security
Package Updates
- Keep
firecrawl-pyand other dependencies updated - Monitor for security advisories
- Use dependency scanning tools
# Check for vulnerabilities
pip-audit
# or
safety check
Best Practices Summary
- ✅ Store API keys securely (environment variables, secrets management)
- ✅ Respect robots.txt and Terms of Service
- ✅ Implement rate limiting and throttling
- ✅ Validate all inputs (URLs, schemas, prompts)
- ✅ Use appropriate timeouts
- ✅ Don't expose sensitive data in logs or errors
- ✅ Keep dependencies updated
- ✅ Identify your scraper with appropriate user agents
- ✅ Respect website resources and privacy
- ✅ Follow legal and ethical guidelines
Reporting Security Issues
If you discover a security vulnerability in this module, please report it responsibly:
- Do not open a public issue
- Contact the maintainers privately
- Provide detailed information about the vulnerability
- Allow time for the issue to be addressed before public disclosure
Compliance
When using this module, ensure compliance with:
- GDPR: If scraping EU websites or handling EU user data
- CCPA: If scraping California websites or handling California user data
- Website Terms of Service: Always review and comply
- Copyright Laws: Respect intellectual property rights
- Data Protection Laws: Handle personal data appropriately
Navigation Links
- Parent: Project Overview
- Module Index: All Agents
- Documentation: Reference Guides
- Home: Root README