Skip to content

Security Configuration

FastAPI Guard uses Pydantic models for configuration and data structures.


SecurityConfig

The main configuration model for FastAPI Guard middleware.

class SecurityConfig(BaseSettings):
    """
    Main configuration model for FastAPI Guard.
    All settings can be configured via environment variables with FASTAPI_GUARD_ prefix.
    """

Core Security Settings

Field Type Default Description
enabled bool True Enable/disable the middleware
passive_mode bool False If True, only log without blocking
enable_penetration_detection bool True Enable penetration attempt detection
auto_ban_threshold int 5 Number of suspicious requests before auto-ban
auto_ban_duration int 3600 Auto-ban duration in seconds

Detection Engine Settings

New configuration fields for the enhanced Detection Engine:

Field Type Default Description
detection_compiler_timeout float 2.0 Timeout for pattern compilation and execution (seconds)
detection_max_content_length int 10000 Maximum content length to analyze
detection_preserve_attack_patterns bool True Preserve attack patterns during content truncation
detection_semantic_threshold float 0.7 Minimum threat score for semantic detection (0.0-1.0)
detection_anomaly_threshold float 3.0 Standard deviations to consider performance anomaly
detection_slow_pattern_threshold float 0.1 Execution time to consider pattern slow (seconds)
detection_monitor_history_size int 1000 Number of performance metrics to keep in history
detection_max_tracked_patterns int 1000 Maximum patterns to track for performance

IP Management Settings

Field Type Default Description
trusted_ips list[str] [] List of always-allowed IP addresses
blocked_ips list[str] [] List of always-blocked IP addresses
blocked_countries list[str] [] List of blocked country codes
blocked_user_agents list[str] [] List of blocked user agent patterns
trusted_hosts list[str] ["*"] List of allowed host headers
real_ip_header str None Header containing real IP (e.g., 'X-Forwarded-For')
global_rate_limit str "5000/hour" Global rate limit for all requests

Redis Settings

Field Type Default Description
use_redis bool False Enable Redis integration
redis_host str "localhost" Redis server hostname
redis_port int 6379 Redis server port
redis_password str None Redis password
redis_db int 0 Redis database number
redis_ssl bool False Use SSL for Redis connection
redis_pool_size int 10 Connection pool size
redis_ttl int 86400 Default TTL for Redis keys (seconds)

Agent Settings

Field Type Default Description
enable_agent bool False Enable FastAPI Guard Agent integration
agent_api_key str None API key for agent authentication
agent_api_base_url str "https://api.fastapiguard.com/v1/agent" Agent API endpoint
agent_enable_events bool True Send events to agent
agent_enable_metrics bool True Send metrics to agent
agent_send_interval int 60 Metric sending interval (seconds)

Cloud Provider Settings

Field Type Default Description
ipinfo_token str None IPInfo API token for geolocation
block_cloud_providers dict {} Cloud providers to block
cloud_provider_cache_ttl int 86400 Cache TTL for cloud provider data

CORS Settings

Field Type Default Description
cors_enabled bool True Enable CORS handling
cors_origins list[str] ["*"] Allowed origins
cors_methods list[str] ["*"] Allowed methods
cors_headers list[str] ["*"] Allowed headers
cors_credentials bool False Allow credentials
cors_max_age int 600 Preflight cache duration

Logging Settings

Field Type Default Description
log_enabled bool True Enable request logging
log_level str "INFO" Logging level
custom_log_file str None Custom log file path
log_format str "default" Log format (default, json)
mask_sensitive_data bool True Mask sensitive data in logs

Usage Example

from guard import SecurityConfig

# Basic configuration
config = SecurityConfig(
    enable_penetration_detection=True,
    auto_ban_threshold=5,
    detection_semantic_threshold=0.7
)

# Full configuration
config = SecurityConfig(
    # Core settings
    enabled=True,
    passive_mode=False,

    # Detection engine
    enable_penetration_detection=True,
    detection_compiler_timeout=2.0,
    detection_max_content_length=10000,
    detection_preserve_attack_patterns=True,
    detection_semantic_threshold=0.7,
    detection_anomaly_threshold=3.0,
    detection_slow_pattern_threshold=0.1,
    detection_monitor_history_size=1000,
    detection_max_tracked_patterns=1000,

    # Redis
    use_redis=True,
    redis_host="localhost",
    redis_port=6379,

    # Agent
    enable_agent=True,
    agent_api_key="your-api-key",

    # Logging
    custom_log_file="security.log",
    log_level="WARNING"
)

Environment Variables

All settings can be configured using environment variables with the FASTAPI_GUARD_ prefix:

export FASTAPI_GUARD_ENABLED=true
export FASTAPI_GUARD_DETECTION_SEMANTIC_THRESHOLD=0.8
export FASTAPI_GUARD_REDIS_HOST=redis.example.com
export FASTAPI_GUARD_AGENT_API_KEY=your-api-key

Other Models

IPInfo

class IPInfo(BaseModel):
    """IP address information from geolocation service"""
    ip: str
    country: str | None = None
    region: str | None = None
    city: str | None = None
    is_cloud: bool = False
    cloud_provider: str | None = None

RateLimitStatus

class RateLimitStatus(BaseModel):
    """Rate limit status for a client"""
    allowed: bool
    current_requests: int
    limit: int
    window_seconds: int
    reset_time: datetime

ThreatDetectionResult

class ThreatDetectionResult(TypedDict):
    """Result from detection engine analysis"""
    is_threat: bool
    threat_score: float
    threats: list[dict[str, Any]]
    context: str
    original_length: int
    processed_length: int
    execution_time: float
    detection_method: str
    timeouts: list[str]
    correlation_id: str | None

BehaviorProfile

class BehaviorProfile(BaseModel):
    """Client behavior profile for analysis"""
    ip_address: str
    request_count: int
    suspicious_count: int
    last_seen: datetime
    user_agents: list[str]
    paths_accessed: list[str]
    methods_used: list[str]
    risk_score: float

Configuration Validation

The SecurityConfig model validates settings on initialization:

# Validation examples
try:
    config = SecurityConfig(
        detection_compiler_timeout=0.05  # Too low
    )
except ValidationError as e:
    print(f"Configuration error: {e}")

# Valid ranges
config = SecurityConfig(
    detection_compiler_timeout=2.0,      # 0.1 - 30.0
    detection_semantic_threshold=0.7,    # 0.0 - 1.0
    detection_anomaly_threshold=3.0,     # 1.0 - 10.0
    auto_ban_threshold=5,                # 1 - 1000
    auto_ban_duration=3600,              # 60 - 86400
)

Model Serialization

All models support standard Pydantic serialization:

# Export configuration
config_dict = config.dict(exclude_unset=True)
config_json = config.json(indent=2)

# Import configuration
config = SecurityConfig.parse_obj(config_dict)
config = SecurityConfig.parse_raw(config_json)

# Schema generation
schema = SecurityConfig.schema()

Custom Validators

The models include custom validators for complex fields:

@validator("detection_semantic_threshold")
def validate_threshold(cls, v):
    if not 0.0 <= v <= 1.0:
        raise ValueError("Threshold must be between 0.0 and 1.0")
    return v

@validator("redis_host")
def validate_redis_host(cls, v, values):
    if values.get("use_redis") and not v:
        raise ValueError("Redis host required when use_redis is True")
    return v

See Also