pulseengine_mcp_security/
lib.rs

1//! Security middleware and validation for MCP servers
2//!
3//! This crate provides comprehensive security features for MCP servers including:
4//! - Input validation and sanitization
5//! - Rate limiting and request throttling
6//! - CORS policy management
7//! - Request size limits
8//! - SQL injection and XSS protection
9//!
10//! # Quick Start
11//!
12//! ```rust,no_run
13//! use pulseengine_mcp_security::{SecurityMiddleware, SecurityConfig, RequestValidator};
14//! use pulseengine_mcp_protocol::Request;
15//!
16//! #[tokio::main]
17//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
18//!     // Create security configuration
19//!     let config = SecurityConfig {
20//!         max_request_size: 1024 * 1024, // 1MB limit
21//!         rate_limit_requests_per_minute: 60,
22//!         allowed_origins: vec!["https://example.com".to_string()],
23//!         enable_ip_whitelist: true,
24//!         allowed_ips: vec!["192.168.1.0/24".to_string()],
25//!         ..Default::default()
26//!     };
27//!
28//!     // Create security middleware
29//!     let security = SecurityMiddleware::new(config);
30//!
31//!     // Validate requests
32//!     let validator = RequestValidator::new();
33//!
34//!     // In your request handler:
35//!     // let is_valid = validator.validate_request(&request).await?;
36//!
37//!     Ok(())
38//! }
39//! ```
40//!
41//! # Features
42//!
43//! - **Input validation**: Comprehensive request validation with schemas
44//! - **Rate limiting**: Per-IP and per-user rate limiting
45//! - **CORS management**: Configurable cross-origin policies
46//! - **Size limits**: Prevent DoS through large requests
47//! - **Injection protection**: SQL injection and script injection prevention
48//! - **Production hardened**: Battle-tested security measures
49
50pub mod config;
51pub mod middleware;
52pub mod validation;
53
54pub use config::SecurityConfig;
55pub use middleware::SecurityMiddleware;
56pub use validation::RequestValidator;
57
58/// Default security configuration
59pub fn default_config() -> SecurityConfig {
60    SecurityConfig::default()
61}