mcp-sanitizer
Version:
Comprehensive security sanitization library for Model Context Protocol (MCP) servers with trusted security libraries
358 lines (285 loc) • 9.55 kB
Markdown
# MCP Sanitizer Configuration System
The MCP Sanitizer configuration system provides a flexible and secure way to configure the sanitizer for different use cases and environments. It includes predefined security policies, customizable configurations, and a fluent API for easy setup.
## Table of Contents
- [Quick Start](#quick-start)
- [Security Policies](#security-policies)
- [Configuration Options](#configuration-options)
- [Usage Examples](#usage-examples)
- [API Reference](#api-reference)
- [Best Practices](#best-practices)
## Quick Start
### Using Default Configuration
```javascript
const MCPSanitizer = require('mcp-sanitizer');
// Use default configuration
const sanitizer = new MCPSanitizer();
```
### Using Security Policies
```javascript
// Use predefined security policy
const sanitizer = new MCPSanitizer('STRICT');
// Use policy with customizations
const sanitizer = new MCPSanitizer({
policy: 'MODERATE',
maxStringLength: 15000,
allowedProtocols: ['https', 'mcp']
});
```
### Using Configuration Builder
```javascript
const { createConfigBuilder } = require('mcp-sanitizer/src/config');
const config = createConfigBuilder()
.usePolicy('MODERATE')
.maxStringLength(20000)
.allowProtocols(['https', 'mcp'])
.strictMode(true)
.build();
const sanitizer = new MCPSanitizer(config);
```
## Security Policies
The MCP Sanitizer includes five predefined security policies:
### STRICT Policy
- **Use Case**: High-security environments, untrusted input
- **Protocols**: HTTPS only
- **String Length**: 1,000 characters max
- **Depth**: 3 levels max
- **File Extensions**: .txt, .json only
- **Blocking**: Medium severity and above
### MODERATE Policy
- **Use Case**: Production applications with balanced security
- **Protocols**: HTTP, HTTPS, MCP
- **String Length**: 5,000 characters max
- **Depth**: 8 levels max
- **File Extensions**: .txt, .json, .md, .csv, .yaml, .yml
- **Blocking**: High severity and above
### PERMISSIVE Policy
- **Use Case**: Trusted environments, development scenarios
- **Protocols**: HTTP, HTTPS, FTP, MCP, File
- **String Length**: 50,000 characters max
- **Depth**: 20 levels max
- **File Extensions**: Many common file types
- **Blocking**: Critical severity only
### DEVELOPMENT Policy
- **Use Case**: Development environments with debugging
- **Protocols**: HTTP, HTTPS, MCP, File
- **String Length**: 20,000 characters max
- **Depth**: 15 levels max
- **Features**: Relaxed restrictions, localhost access allowed
### PRODUCTION Policy
- **Use Case**: Production environments with security focus
- **Protocols**: HTTPS, MCP only
- **String Length**: 8,000 characters max
- **Depth**: 10 levels max
- **Features**: Enhanced security patterns, caching enabled
## Configuration Options
### Network Security
```javascript
{
allowedProtocols: ['http', 'https', 'mcp'],
contextSettings: {
url: {
allowPrivateIPs: false,
allowLocalhostWithoutPort: false,
maxURLLength: 2048,
blockedDomains: [],
allowedDomains: []
}
}
}
```
### Content Limits
```javascript
{
maxStringLength: 10000, // Maximum string length
maxDepth: 10, // Maximum object depth
maxArrayLength: 1000, // Maximum array length
maxObjectKeys: 100 // Maximum object keys
}
```
### File System Security
```javascript
{
allowedFileExtensions: ['.txt', '.json', '.md'],
contextSettings: {
filePath: {
allowAbsolutePaths: false,
allowedDirectories: ['./data', './uploads'],
blockedDirectories: ['/etc', '/proc', '/sys']
}
}
}
```
### Pattern Detection
```javascript
{
blockedPatterns: [
/\$\{.*?\}|\{\{.*?\}\}/, // Template injection
/__proto__|constructor\.prototype/i, // Prototype pollution
/require\s*\(|eval\s*\(/i // Code execution
],
sqlKeywords: ['DROP', 'DELETE', 'INSERT'],
patternDetection: {
enableCommandInjection: true,
enableSQLInjection: true,
enablePrototypePollution: true,
enableTemplateInjection: true,
enableXSSDetection: true,
enablePathTraversal: true
}
}
```
### Security Settings
```javascript
{
strictMode: false, // Enable strict validation
logSecurityEvents: true, // Log security violations
blockOnSeverity: 'critical', // Block at this severity level
}
```
## Usage Examples
### Environment-Based Configuration
```javascript
const { createRecommendedConfig } = require('mcp-sanitizer/src/config');
// Get recommended configuration for environment
const { config, metadata } = createRecommendedConfig('production', 'low');
console.log(metadata.rationale); // Why this policy was recommended
const sanitizer = new MCPSanitizer(config);
```
### Runtime Configuration Updates
```javascript
const sanitizer = new MCPSanitizer('MODERATE');
// Update configuration at runtime
sanitizer.updateConfig({
maxStringLength: 25000,
allowedProtocols: ['https', 'mcp']
});
// Apply new policy
sanitizer.applyPolicy('STRICT', {
maxStringLength: 8000 // Override strict policy setting
});
// Check environment compatibility
const compatibility = sanitizer.checkEnvironmentCompatibility('production');
if (!compatibility.compatible) {
console.log('Warnings:', compatibility.warnings);
console.log('Recommendations:', compatibility.recommendations);
}
```
### Custom Security Patterns
```javascript
const { createConfig } = require('mcp-sanitizer/src/config');
const config = createConfig({
blockedPatterns: [
// Add custom patterns for your use case
/bitcoin|cryptocurrency/i, // Block crypto content
/\b\d{16}\b/, // Block credit card numbers
/password|secret|token/i // Block sensitive keywords
],
sqlKeywords: [
// Add custom SQL keywords
'MERGE', 'UPSERT', 'BULK'
]
});
```
### Policy Validation
```javascript
const { validatePolicyRequirements } = require('mcp-sanitizer/src/config');
const requirements = {
requireHTTPS: true,
maxStringLength: 5000,
blockSeverity: 'medium'
};
const validation = validatePolicyRequirements(config, requirements);
if (!validation.valid) {
console.log('Policy violations:', validation.violations);
}
```
## API Reference
### Configuration Functions
- `createConfig(options)` - Create configuration with defaults
- `createConfigFromPolicy(policyName, customizations)` - Create from policy
- `createRecommendedConfig(environment, trustLevel, customizations)` - Get recommended config
- `createConfigBuilder()` - Create fluent builder
- `mergeConfig(baseConfig, customConfig)` - Merge configurations
- `validateConfig(config)` - Validate configuration
- `getDefaultConfig()` - Get default configuration copy
### Security Policy Functions
- `getSecurityPolicy(policyName)` - Get policy by name
- `createCustomPolicy(basePolicyName, customizations)` - Create custom policy
- `getPolicyRecommendation(environment, trustLevel)` - Get policy recommendation
- `validatePolicyRequirements(policy, requirements)` - Validate policy requirements
### Utility Functions
- `getConfigSummary(config)` - Get configuration summary
- `validateEnvironmentCompatibility(config, environment)` - Check environment compatibility
### MCPSanitizer Methods
- `getConfigSummary()` - Get current configuration summary
- `updateConfig(newOptions)` - Update configuration
- `applyPolicy(policyName, customizations)` - Apply security policy
- `checkEnvironmentCompatibility(environment)` - Check environment compatibility
## Best Practices
### Security
1. **Use appropriate policies for your environment**:
- Development: `DEVELOPMENT` or `PERMISSIVE`
- Staging: `MODERATE` or `PRODUCTION`
- Production: `PRODUCTION` or `STRICT`
2. **Validate configurations against requirements**:
```javascript
const validation = validatePolicyRequirements(config, {
requireHTTPS: true,
blockSeverity: 'medium'
});
```
3. **Check environment compatibility**:
```javascript
const compatibility = sanitizer.checkEnvironmentCompatibility('production');
```
### Performance
1. **Use caching in production**:
```javascript
const config = createConfig({
performance: {
enableCaching: true,
maxConcurrentRequests: 100
}
});
```
2. **Set appropriate limits**:
```javascript
const config = createConfig({
maxStringLength: 10000, // Balance security and functionality
maxDepth: 10, // Prevent deep nesting attacks
performance: {
timeoutMs: 5000 // Prevent DoS through slow processing
}
});
```
### Flexibility
1. **Use the configuration builder for complex setups**:
```javascript
const config = createConfigBuilder()
.usePolicy('MODERATE')
.custom({ maxStringLength: 15000 })
.patternDetection({ enableTemplateInjection: false })
.build();
```
2. **Create custom policies for reuse**:
```javascript
const customPolicy = createCustomPolicy('MODERATE', {
allowedProtocols: ['https', 'mcp'],
maxStringLength: 20000
});
```
### Monitoring
1. **Enable security event logging**:
```javascript
const config = createConfig({
logSecurityEvents: true,
blockOnSeverity: 'medium'
});
```
2. **Monitor configuration summaries**:
```javascript
const summary = sanitizer.getConfigSummary();
console.log('Current limits:', summary.limits);
console.log('Security settings:', summary.security);
```
For more examples, see the [configuration examples file](../../examples/configuration-examples.js).