mcp-wordpress 1.5.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +332 -61
- package/dist/cache/CacheInvalidation.d.ts.map +1 -1
- package/dist/cache/CacheInvalidation.js +4 -4
- package/dist/cache/CacheInvalidation.js.map +1 -1
- package/dist/client/MockWordPressClient.d.ts +55 -0
- package/dist/client/MockWordPressClient.d.ts.map +1 -0
- package/dist/client/MockWordPressClient.js +369 -0
- package/dist/client/MockWordPressClient.js.map +1 -0
- package/dist/client/api.d.ts +1 -0
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +26 -60
- package/dist/client/api.js.map +1 -1
- package/dist/client/managers/AuthenticationManager.d.ts.map +1 -1
- package/dist/client/managers/AuthenticationManager.js +4 -3
- package/dist/client/managers/AuthenticationManager.js.map +1 -1
- package/dist/config/ConfigurationSchema.d.ts +3 -3
- package/dist/config/ConfigurationSchema.d.ts.map +1 -1
- package/dist/config/ConfigurationSchema.js +7 -24
- package/dist/config/ConfigurationSchema.js.map +1 -1
- package/dist/config/ServerConfiguration.d.ts +8 -0
- package/dist/config/ServerConfiguration.d.ts.map +1 -1
- package/dist/config/ServerConfiguration.js +80 -31
- package/dist/config/ServerConfiguration.js.map +1 -1
- package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
- package/dist/docs/DocumentationGenerator.js +5 -7
- package/dist/docs/DocumentationGenerator.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -29
- package/dist/index.js.map +1 -1
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +3 -11
- package/dist/security/InputValidator.js.map +1 -1
- package/dist/server/ToolRegistry.d.ts +4 -0
- package/dist/server/ToolRegistry.d.ts.map +1 -1
- package/dist/server/ToolRegistry.js +71 -8
- package/dist/server/ToolRegistry.js.map +1 -1
- package/dist/tools/auth.d.ts.map +1 -1
- package/dist/tools/auth.js +8 -3
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/posts.d.ts.map +1 -1
- package/dist/tools/posts.js +287 -20
- package/dist/tools/posts.js.map +1 -1
- package/dist/tools/site.d.ts.map +1 -1
- package/dist/tools/site.js +47 -9
- package/dist/tools/site.js.map +1 -1
- package/dist/tools/users.d.ts.map +1 -1
- package/dist/tools/users.js +113 -10
- package/dist/tools/users.js.map +1 -1
- package/dist/utils/enhancedError.d.ts +61 -0
- package/dist/utils/enhancedError.d.ts.map +1 -0
- package/dist/utils/enhancedError.js +221 -0
- package/dist/utils/enhancedError.js.map +1 -0
- package/dist/utils/streaming.d.ts +104 -0
- package/dist/utils/streaming.d.ts.map +1 -0
- package/dist/utils/streaming.js +312 -0
- package/dist/utils/streaming.js.map +1 -0
- package/dist/utils/validation.d.ts +19 -3
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +174 -24
- package/dist/utils/validation.js.map +1 -1
- package/docs/ARCHITECTURE.md +850 -0
- package/docs/CACHING.md +20 -17
- package/docs/CONFIGURATION.md +660 -0
- package/docs/DOCKER.md +61 -60
- package/docs/EVALUATION.md +397 -0
- package/docs/INSTALLATION.md +423 -0
- package/docs/PERFORMANCE_MONITORING.md +17 -15
- package/docs/SECURITY.md +621 -0
- package/docs/SECURITY_TESTING.md +22 -26
- package/docs/TEST_SITE_SETUP.md +136 -0
- package/docs/TROUBLESHOOTING.md +578 -0
- package/docs/api/README.md +76 -91
- package/docs/api/categories/auth.md +0 -2
- package/docs/api/categories/cache.md +0 -2
- package/docs/api/categories/comment.md +0 -2
- package/docs/api/categories/media.md +0 -2
- package/docs/api/categories/page.md +0 -2
- package/docs/api/categories/performance.md +0 -2
- package/docs/api/categories/post.md +0 -2
- package/docs/api/categories/site.md +0 -2
- package/docs/api/categories/taxonomy.md +0 -2
- package/docs/api/categories/user.md +0 -2
- package/docs/api/summary.json +1 -1
- package/docs/api/tools/wp_approve_comment.md +11 -3
- package/docs/api/tools/wp_cache_clear.md +14 -5
- package/docs/api/tools/wp_cache_info.md +14 -5
- package/docs/api/tools/wp_cache_stats.md +14 -5
- package/docs/api/tools/wp_cache_warm.md +14 -5
- package/docs/api/tools/wp_create_application_password.md +11 -3
- package/docs/api/tools/wp_create_category.md +11 -3
- package/docs/api/tools/wp_create_comment.md +14 -5
- package/docs/api/tools/wp_create_page.md +13 -5
- package/docs/api/tools/wp_create_post.md +14 -7
- package/docs/api/tools/wp_create_tag.md +11 -3
- package/docs/api/tools/wp_create_user.md +13 -5
- package/docs/api/tools/wp_delete_application_password.md +11 -3
- package/docs/api/tools/wp_delete_category.md +11 -3
- package/docs/api/tools/wp_delete_comment.md +11 -3
- package/docs/api/tools/wp_delete_media.md +10 -3
- package/docs/api/tools/wp_delete_page.md +10 -3
- package/docs/api/tools/wp_delete_post.md +11 -5
- package/docs/api/tools/wp_delete_tag.md +11 -3
- package/docs/api/tools/wp_delete_user.md +10 -3
- package/docs/api/tools/wp_get_application_passwords.md +11 -3
- package/docs/api/tools/wp_get_auth_status.md +11 -3
- package/docs/api/tools/wp_get_category.md +11 -3
- package/docs/api/tools/wp_get_comment.md +11 -3
- package/docs/api/tools/wp_get_current_user.md +11 -3
- package/docs/api/tools/wp_get_media.md +11 -3
- package/docs/api/tools/wp_get_page.md +11 -3
- package/docs/api/tools/wp_get_page_revisions.md +11 -3
- package/docs/api/tools/wp_get_post.md +12 -5
- package/docs/api/tools/wp_get_post_revisions.md +11 -3
- package/docs/api/tools/wp_get_site_settings.md +10 -3
- package/docs/api/tools/wp_get_tag.md +11 -3
- package/docs/api/tools/wp_get_user.md +11 -3
- package/docs/api/tools/wp_list_categories.md +11 -3
- package/docs/api/tools/wp_list_comments.md +11 -3
- package/docs/api/tools/wp_list_media.md +14 -5
- package/docs/api/tools/wp_list_pages.md +14 -5
- package/docs/api/tools/wp_list_posts.md +15 -7
- package/docs/api/tools/wp_list_tags.md +11 -3
- package/docs/api/tools/wp_list_users.md +11 -3
- package/docs/api/tools/wp_performance_alerts.md +17 -7
- package/docs/api/tools/wp_performance_benchmark.md +17 -7
- package/docs/api/tools/wp_performance_export.md +17 -7
- package/docs/api/tools/wp_performance_history.md +17 -7
- package/docs/api/tools/wp_performance_optimize.md +17 -7
- package/docs/api/tools/wp_performance_stats.md +17 -7
- package/docs/api/tools/wp_search_site.md +11 -3
- package/docs/api/tools/wp_spam_comment.md +11 -3
- package/docs/api/tools/wp_switch_auth_method.md +14 -5
- package/docs/api/tools/wp_test_auth.md +11 -3
- package/docs/api/tools/wp_update_category.md +11 -3
- package/docs/api/tools/wp_update_comment.md +14 -5
- package/docs/api/tools/wp_update_media.md +14 -5
- package/docs/api/tools/wp_update_page.md +13 -5
- package/docs/api/tools/wp_update_post.md +14 -7
- package/docs/api/tools/wp_update_site_settings.md +14 -5
- package/docs/api/tools/wp_update_tag.md +11 -3
- package/docs/api/tools/wp_update_user.md +13 -5
- package/docs/api/tools/wp_upload_media.md +13 -5
- package/docs/api/types/WordPressPost.md +2 -0
- package/docs/code-improvements.md +40 -0
- package/docs/contract-testing.md +1 -1
- package/docs/developer/API_REFERENCE.md +19 -59
- package/docs/developer/ARCHITECTURE.md +8 -11
- package/docs/developer/BUILD_SYSTEM.md +2 -2
- package/docs/developer/CONTRIBUTING.md +3 -5
- package/docs/developer/GITHUB_ACTIONS_SETUP.md +2 -2
- package/docs/developer/MIGRATION_GUIDE.md +5 -6
- package/docs/developer/README.md +2 -1
- package/docs/developer/REFACTORING.md +9 -15
- package/docs/developer/RELEASE_PROCESS.md +4 -3
- package/docs/developer/TESTING.md +2 -2
- package/docs/examples/claude-desktop-config.md +8 -0
- package/docs/integrations/claude-desktop.md +426 -0
- package/docs/integrations/cline.md +537 -0
- package/docs/integrations/vs-code.md +515 -0
- package/docs/releases/COMMUNITY_ANNOUNCEMENT_v1.1.2.md +30 -23
- package/docs/releases/RELEASE_NOTES_v1.1.2.md +7 -6
- package/docs/testing-configurations.md +11 -0
- package/docs/user-guides/DOCKER_NPM_DTX_SETUP.md +3 -2
- package/docs/user-guides/DOCKER_SETUP.md +3 -2
- package/docs/user-guides/DTX_SETUP.md +6 -5
- package/docs/user-guides/DXT_INSTALLATION.md +4 -4
- package/docs/user-guides/NPM_SETUP.md +4 -2
- package/docs/user-guides/NPX_SETUP.md +4 -2
- package/docs/user-guides/SMITHERY_SETUP.md +402 -0
- package/docs/wordpress-rest-api-authentication-troubleshooting.md +45 -42
- package/package.json +12 -2
- package/src/cache/CacheInvalidation.ts +7 -18
- package/src/client/MockWordPressClient.ts +398 -0
- package/src/client/api.ts +77 -237
- package/src/client/managers/AuthenticationManager.ts +19 -56
- package/src/config/ConfigurationSchema.ts +14 -45
- package/src/config/ServerConfiguration.ts +98 -71
- package/src/docs/DocumentationGenerator.ts +39 -123
- package/src/dxt-entry.cjs +4 -1
- package/src/index.ts +35 -54
- package/src/security/InputValidator.ts +15 -57
- package/src/server/ToolRegistry.ts +88 -17
- package/src/tools/auth.ts +15 -22
- package/src/tools/posts.ts +347 -64
- package/src/tools/site.ts +69 -46
- package/src/tools/users.ts +142 -44
- package/src/utils/enhancedError.ts +248 -0
- package/src/utils/streaming.ts +428 -0
- package/src/utils/validation.ts +253 -92
- package/dist/mcp-wordpress-1.5.2.tgz +0 -0
package/docs/SECURITY.md
ADDED
|
@@ -0,0 +1,621 @@
|
|
|
1
|
+
# 🔒 Security Guide
|
|
2
|
+
|
|
3
|
+
**Comprehensive security guide for MCP WordPress Server deployment and operation.**
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Security Overview](#security-overview)
|
|
8
|
+
- [Authentication Security](#authentication-security)
|
|
9
|
+
- [Input Validation & Sanitization](#input-validation--sanitization)
|
|
10
|
+
- [Network Security](#network-security)
|
|
11
|
+
- [Data Protection](#data-protection)
|
|
12
|
+
- [Security Testing](#security-testing)
|
|
13
|
+
- [Production Deployment](#secure-deployment)
|
|
14
|
+
- [Incident Response](#incident-response)
|
|
15
|
+
|
|
16
|
+
## Security Overview
|
|
17
|
+
|
|
18
|
+
The MCP WordPress Server is designed with security as a core principle. This guide covers security best practices,
|
|
19
|
+
threat mitigation, and compliance requirements.
|
|
20
|
+
|
|
21
|
+
### Security Posture
|
|
22
|
+
|
|
23
|
+
- **✅ 40/40 Security Tests Passing** - Comprehensive security validation
|
|
24
|
+
- **✅ Input Validation** - All inputs validated and sanitized with edge case handling
|
|
25
|
+
- **✅ XSS Protection** - Cross-site scripting prevention with content sanitization
|
|
26
|
+
- **✅ SQL Injection Prevention** - Database attack protection with parameterized queries
|
|
27
|
+
- **✅ Path Traversal Protection** - File system security with directory restrictions
|
|
28
|
+
- **✅ Rate Limiting** - DoS protection with configurable thresholds
|
|
29
|
+
- **✅ Credential Security** - Secure authentication handling with encryption
|
|
30
|
+
|
|
31
|
+
### Security Architecture
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
35
|
+
│ AI Client │ │ MCP Server │ │ WordPress │
|
|
36
|
+
│ (Claude) │◄──►│ (This App) │◄──►│ REST API │
|
|
37
|
+
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
38
|
+
│
|
|
39
|
+
▼
|
|
40
|
+
┌─────────────────┐
|
|
41
|
+
│ Security Layer │
|
|
42
|
+
│ - Validation │
|
|
43
|
+
│ - Sanitization │
|
|
44
|
+
│ - Rate Limiting │
|
|
45
|
+
│ - Audit Log │
|
|
46
|
+
└─────────────────┘
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Threat Model
|
|
50
|
+
|
|
51
|
+
**Protected Against:**
|
|
52
|
+
|
|
53
|
+
- ✅ **Injection Attacks** - SQL, NoSQL, Command injection
|
|
54
|
+
- ✅ **Cross-Site Scripting (XSS)** - Reflected, stored, DOM-based
|
|
55
|
+
- ✅ **Path Traversal** - Directory traversal, file inclusion
|
|
56
|
+
- ✅ **Authentication Bypass** - Session hijacking, credential stuffing
|
|
57
|
+
- ✅ **Denial of Service** - Request flooding, resource exhaustion
|
|
58
|
+
- ✅ **Data Exposure** - Sensitive information leakage
|
|
59
|
+
- ✅ **Authorization Flaws** - Privilege escalation, access control bypass
|
|
60
|
+
|
|
61
|
+
## Authentication Security
|
|
62
|
+
|
|
63
|
+
### WordPress Application Passwords (Recommended)
|
|
64
|
+
|
|
65
|
+
**Benefits:**
|
|
66
|
+
|
|
67
|
+
- ✅ Revocable without changing main password
|
|
68
|
+
- ✅ Scoped to specific applications
|
|
69
|
+
- ✅ Audit trail and access logging
|
|
70
|
+
- ✅ WordPress native security features
|
|
71
|
+
|
|
72
|
+
**Security Implementation:**
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# Create dedicated MCP user with minimal permissions
|
|
76
|
+
# Use unique application password name
|
|
77
|
+
# Regenerate passwords regularly
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Best Practices:**
|
|
81
|
+
|
|
82
|
+
1. **Dedicated User Account**: Create specific user for MCP access
|
|
83
|
+
2. **Minimal Permissions**: Grant only required WordPress capabilities
|
|
84
|
+
3. **Regular Rotation**: Change passwords every 90 days
|
|
85
|
+
4. **Unique Names**: Use descriptive application password names
|
|
86
|
+
5. **Monitor Access**: Review authentication logs regularly
|
|
87
|
+
|
|
88
|
+
### Authentication Methods Comparison
|
|
89
|
+
|
|
90
|
+
| Method | Security Level | Production Ready | Use Case |
|
|
91
|
+
|--------|----------------|------------------|----------|
|
|
92
|
+
| **Application Password** | 🟢 High | ✅ Yes | Recommended for all environments |
|
|
93
|
+
| **JWT** | 🟡 Medium | ⚠️ With proper setup | API-heavy applications |
|
|
94
|
+
| **Basic Auth** | 🔴 Low | ❌ No | Development only |
|
|
95
|
+
| **API Key** | 🟡 Medium | ⚠️ Plugin dependent | Plugin-based authentication |
|
|
96
|
+
|
|
97
|
+
## Input Validation & Sanitization
|
|
98
|
+
|
|
99
|
+
### Enhanced Validation System
|
|
100
|
+
|
|
101
|
+
The MCP WordPress Server implements **multi-layer validation** with comprehensive edge case handling:
|
|
102
|
+
|
|
103
|
+
#### 1. Type & Format Validation
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
// Enhanced ID validation with edge cases
|
|
107
|
+
validateId(id, "post ID");
|
|
108
|
+
// Handles: null, undefined, strings, decimals, negatives, overflow
|
|
109
|
+
|
|
110
|
+
// URL validation with security checks
|
|
111
|
+
validateUrl(url, "site URL");
|
|
112
|
+
// Validates: protocol, hostname, port, localhost restrictions
|
|
113
|
+
|
|
114
|
+
// Username validation with security filtering
|
|
115
|
+
validateUsername(username);
|
|
116
|
+
// Checks: length, characters, reserved names, consecutive spaces
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
#### 2. Content Sanitization
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
// HTML content sanitization
|
|
123
|
+
sanitizeHtml(content);
|
|
124
|
+
// Removes: <script>, event handlers, javascript:, dangerous patterns
|
|
125
|
+
|
|
126
|
+
// Search query sanitization
|
|
127
|
+
validateSearchQuery(query);
|
|
128
|
+
// Filters: SQL patterns, XSS attempts, control characters
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
#### 3. Complex Parameter Validation
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
// Post creation with contextual validation
|
|
135
|
+
validatePostParams({
|
|
136
|
+
title: "My Post", // Required, sanitized
|
|
137
|
+
content: "<p>Safe HTML</p>", // XSS protection
|
|
138
|
+
status: "future", // Valid status
|
|
139
|
+
date: "2024-01-01T10:00:00", // Required for future posts
|
|
140
|
+
categories: [1, 2, 3] // Valid category IDs
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
// Pagination with conflict detection
|
|
144
|
+
validatePaginationParams({
|
|
145
|
+
page: 1,
|
|
146
|
+
per_page: 10,
|
|
147
|
+
offset: 20 // ERROR: Cannot use page and offset together
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
#### 4. Security Patterns Protection
|
|
152
|
+
|
|
153
|
+
**XSS Prevention:**
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
// Content filtering
|
|
157
|
+
const dangerousPatterns = [
|
|
158
|
+
/<script[^>]*>[\s\S]*?<\/script>/gi,
|
|
159
|
+
/<iframe[^>]*>/gi,
|
|
160
|
+
/javascript:/gi,
|
|
161
|
+
/on\w+\s*=/gi // Event handlers
|
|
162
|
+
];
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**SQL Injection Prevention:**
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// Query sanitization
|
|
169
|
+
sanitized = sanitized.replace(
|
|
170
|
+
/(\b(union|select|insert|update|delete|drop|create)\b)/gi,
|
|
171
|
+
""
|
|
172
|
+
);
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Path Traversal Prevention:**
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
// File path validation
|
|
179
|
+
if (path.includes("..") || path.includes("~")) {
|
|
180
|
+
throw new Error("Directory traversal not allowed");
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Content Security Policies
|
|
185
|
+
|
|
186
|
+
#### WordPress Content Validation
|
|
187
|
+
|
|
188
|
+
- HTML content sanitization
|
|
189
|
+
- Media file type validation
|
|
190
|
+
- URL format verification
|
|
191
|
+
- Email address validation
|
|
192
|
+
- WordPress ID validation
|
|
193
|
+
|
|
194
|
+
#### File Upload Security
|
|
195
|
+
|
|
196
|
+
- Extension whitelist enforcement
|
|
197
|
+
- MIME type validation
|
|
198
|
+
- File size limitations
|
|
199
|
+
- Virus scanning integration points
|
|
200
|
+
|
|
201
|
+
## Network Security
|
|
202
|
+
|
|
203
|
+
### HTTPS Requirements
|
|
204
|
+
|
|
205
|
+
**Production Deployment:**
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# Always use HTTPS in production
|
|
209
|
+
WORDPRESS_SITE_URL=https://your-site.com # ✅ Secure
|
|
210
|
+
WORDPRESS_SITE_URL=http://your-site.com # ❌ Insecure
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Development Exceptions:**
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# HTTP acceptable for localhost only
|
|
217
|
+
WORDPRESS_SITE_URL=http://localhost:8080 # ✅ OK for development
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Rate Limiting
|
|
221
|
+
|
|
222
|
+
**Default Protection:**
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
# Built-in rate limiting
|
|
226
|
+
RATE_LIMIT_REQUESTS=1000 # 1000 requests
|
|
227
|
+
RATE_LIMIT_WINDOW=60000 # per minute (60 seconds)
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Aggressive Protection:**
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
# High-security environments
|
|
234
|
+
RATE_LIMIT_REQUESTS=100 # 100 requests
|
|
235
|
+
RATE_LIMIT_WINDOW=60000 # per minute
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Network Access Control
|
|
239
|
+
|
|
240
|
+
#### Docker Deployment
|
|
241
|
+
|
|
242
|
+
```yaml
|
|
243
|
+
# Restrict network access
|
|
244
|
+
services:
|
|
245
|
+
mcp-wordpress:
|
|
246
|
+
networks:
|
|
247
|
+
- internal-network
|
|
248
|
+
# Don't expose ports directly to host
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
#### Firewall Configuration
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
# Allow only necessary ports
|
|
255
|
+
# Port 80/443 for WordPress API access
|
|
256
|
+
# Internal ports for MCP communication only
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## Credential Management
|
|
260
|
+
|
|
261
|
+
### Environment Variables Security
|
|
262
|
+
|
|
263
|
+
**✅ Secure Practices:**
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
# Use environment variables for credentials
|
|
267
|
+
WORDPRESS_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
|
|
268
|
+
|
|
269
|
+
# Never hardcode credentials in code
|
|
270
|
+
# Use .env files for development
|
|
271
|
+
# Use secrets management for production
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
**❌ Insecure Practices:**
|
|
275
|
+
|
|
276
|
+
```javascript
|
|
277
|
+
// Never do this
|
|
278
|
+
const password = "my-password";
|
|
279
|
+
const config = { password: "hardcoded-password" };
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### File Permissions
|
|
283
|
+
|
|
284
|
+
**Configuration Files:**
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
# Secure file permissions
|
|
288
|
+
chmod 600 .env
|
|
289
|
+
chmod 600 mcp-wordpress.config.json
|
|
290
|
+
chown app:app .env
|
|
291
|
+
|
|
292
|
+
# Verify permissions
|
|
293
|
+
ls -la .env
|
|
294
|
+
# Should show: -rw------- 1 app app
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Git Security
|
|
298
|
+
|
|
299
|
+
**Exclude Sensitive Files:**
|
|
300
|
+
|
|
301
|
+
```gitignore
|
|
302
|
+
# .gitignore - Always exclude
|
|
303
|
+
.env
|
|
304
|
+
.env.*
|
|
305
|
+
mcp-wordpress.config.json
|
|
306
|
+
claude_desktop_config.json
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
**Credential Scanning:**
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
# Use tools to scan for committed secrets
|
|
313
|
+
git-secrets --scan
|
|
314
|
+
truffleHog --regex --entropy=False .
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
## Docker Security
|
|
318
|
+
|
|
319
|
+
### Container Security
|
|
320
|
+
|
|
321
|
+
**Base Image Security:**
|
|
322
|
+
|
|
323
|
+
```dockerfile
|
|
324
|
+
# Use official, minimal base images
|
|
325
|
+
FROM node:18-alpine
|
|
326
|
+
|
|
327
|
+
# Run as non-root user
|
|
328
|
+
RUN addgroup -g 1001 -S nodejs
|
|
329
|
+
RUN adduser -S nextjs -u 1001
|
|
330
|
+
USER nextjs
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**Runtime Security:**
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
# Run container with security restrictions
|
|
337
|
+
docker run \
|
|
338
|
+
--user 1001:1001 \
|
|
339
|
+
--read-only \
|
|
340
|
+
--tmpfs /tmp \
|
|
341
|
+
--cap-drop ALL \
|
|
342
|
+
docdyhr/mcp-wordpress:latest
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Secrets Management
|
|
346
|
+
|
|
347
|
+
**Docker Secrets:**
|
|
348
|
+
|
|
349
|
+
```yaml
|
|
350
|
+
# docker-compose.yml
|
|
351
|
+
services:
|
|
352
|
+
mcp-wordpress:
|
|
353
|
+
secrets:
|
|
354
|
+
- wordpress_password
|
|
355
|
+
secrets:
|
|
356
|
+
wordpress_password:
|
|
357
|
+
external: true
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**Environment Variables:**
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
# Use external secret management
|
|
364
|
+
docker run \
|
|
365
|
+
--env-file <(vault kv get -field=env secret/mcp-wordpress) \
|
|
366
|
+
docdyhr/mcp-wordpress:latest
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## Security Monitoring
|
|
370
|
+
|
|
371
|
+
### Audit Logging
|
|
372
|
+
|
|
373
|
+
**Enable Comprehensive Logging:**
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
# Production logging configuration
|
|
377
|
+
NODE_ENV=production
|
|
378
|
+
LOG_LEVEL=warn
|
|
379
|
+
AUDIT_LOG_ENABLED=true
|
|
380
|
+
SECURITY_LOG_ENABLED=true
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
**Log Analysis:**
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
# Monitor authentication failures
|
|
387
|
+
grep "Authentication failed" /var/log/mcp-wordpress.log
|
|
388
|
+
|
|
389
|
+
# Monitor rate limiting
|
|
390
|
+
grep "Rate limit exceeded" /var/log/mcp-wordpress.log
|
|
391
|
+
|
|
392
|
+
# Monitor security validation failures
|
|
393
|
+
grep "Security validation failed" /var/log/mcp-wordpress.log
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### Security Metrics
|
|
397
|
+
|
|
398
|
+
**Key Metrics to Monitor:**
|
|
399
|
+
|
|
400
|
+
- Authentication failure rate
|
|
401
|
+
- Rate limiting triggers
|
|
402
|
+
- Invalid input attempts
|
|
403
|
+
- Error response patterns
|
|
404
|
+
- Connection source analysis
|
|
405
|
+
|
|
406
|
+
### Alerting
|
|
407
|
+
|
|
408
|
+
**Critical Security Events:**
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
# Set up alerts for:
|
|
412
|
+
# - Multiple authentication failures
|
|
413
|
+
# - Rate limiting exceeded
|
|
414
|
+
# - Security validation failures
|
|
415
|
+
# - Unusual access patterns
|
|
416
|
+
# - Error rate spikes
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
## Incident Response
|
|
420
|
+
|
|
421
|
+
### Security Incident Checklist
|
|
422
|
+
|
|
423
|
+
1. **Immediate Response**
|
|
424
|
+
- Disable affected accounts
|
|
425
|
+
- Rotate compromised credentials
|
|
426
|
+
- Enable additional logging
|
|
427
|
+
- Document incident timeline
|
|
428
|
+
|
|
429
|
+
2. **Investigation**
|
|
430
|
+
- Analyze access logs
|
|
431
|
+
- Check WordPress audit logs
|
|
432
|
+
- Review security monitoring
|
|
433
|
+
- Identify attack vectors
|
|
434
|
+
|
|
435
|
+
3. **Remediation**
|
|
436
|
+
- Patch vulnerabilities
|
|
437
|
+
- Update credentials
|
|
438
|
+
- Strengthen security controls
|
|
439
|
+
- Update monitoring rules
|
|
440
|
+
|
|
441
|
+
4. **Recovery**
|
|
442
|
+
- Verify system integrity
|
|
443
|
+
- Test security controls
|
|
444
|
+
- Update documentation
|
|
445
|
+
- Conduct lessons learned
|
|
446
|
+
|
|
447
|
+
### Emergency Procedures
|
|
448
|
+
|
|
449
|
+
**Credential Compromise:**
|
|
450
|
+
|
|
451
|
+
```bash
|
|
452
|
+
# 1. Immediately revoke WordPress application passwords
|
|
453
|
+
# 2. Generate new application passwords
|
|
454
|
+
# 3. Update MCP server configuration
|
|
455
|
+
# 4. Restart MCP server
|
|
456
|
+
# 5. Monitor for continued unauthorized access
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
**System Compromise:**
|
|
460
|
+
|
|
461
|
+
```bash
|
|
462
|
+
# 1. Isolate affected systems
|
|
463
|
+
# 2. Preserve evidence
|
|
464
|
+
# 3. Analyze attack vectors
|
|
465
|
+
# 4. Rebuild from clean backups
|
|
466
|
+
# 5. Implement additional security controls
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
## Secure Deployment
|
|
470
|
+
|
|
471
|
+
### Production Checklist
|
|
472
|
+
|
|
473
|
+
**Pre-Deployment:**
|
|
474
|
+
|
|
475
|
+
- [ ] All credentials use Application Passwords
|
|
476
|
+
- [ ] HTTPS configured and enforced
|
|
477
|
+
- [ ] Rate limiting enabled
|
|
478
|
+
- [ ] Input validation enabled
|
|
479
|
+
- [ ] Security logging enabled
|
|
480
|
+
- [ ] File permissions configured
|
|
481
|
+
- [ ] Network access restricted
|
|
482
|
+
|
|
483
|
+
**WordPress Security:**
|
|
484
|
+
|
|
485
|
+
- [ ] WordPress core updated
|
|
486
|
+
- [ ] Security plugins installed
|
|
487
|
+
- [ ] User permissions audited
|
|
488
|
+
- [ ] Application passwords rotated
|
|
489
|
+
- [ ] Admin accounts secured
|
|
490
|
+
- [ ] REST API access controlled
|
|
491
|
+
|
|
492
|
+
**Infrastructure Security:**
|
|
493
|
+
|
|
494
|
+
- [ ] Firewall configured
|
|
495
|
+
- [ ] SSL certificates valid
|
|
496
|
+
- [ ] Docker containers hardened
|
|
497
|
+
- [ ] Secrets management deployed
|
|
498
|
+
- [ ] Monitoring configured
|
|
499
|
+
- [ ] Backup system secured
|
|
500
|
+
|
|
501
|
+
### Security Updates
|
|
502
|
+
|
|
503
|
+
**Update Schedule:**
|
|
504
|
+
|
|
505
|
+
- **Critical Security Updates**: Immediate
|
|
506
|
+
- **Security Patches**: Within 7 days
|
|
507
|
+
- **Regular Updates**: Monthly
|
|
508
|
+
- **Dependency Updates**: Bi-weekly
|
|
509
|
+
|
|
510
|
+
**Update Process:**
|
|
511
|
+
|
|
512
|
+
1. Review security advisories
|
|
513
|
+
2. Test updates in staging
|
|
514
|
+
3. Schedule maintenance window
|
|
515
|
+
4. Deploy with rollback plan
|
|
516
|
+
5. Verify security controls
|
|
517
|
+
6. Update documentation
|
|
518
|
+
|
|
519
|
+
## Compliance
|
|
520
|
+
|
|
521
|
+
### Security Standards
|
|
522
|
+
|
|
523
|
+
**Supported Standards:**
|
|
524
|
+
|
|
525
|
+
- OWASP Top 10 compliance
|
|
526
|
+
- WordPress security best practices
|
|
527
|
+
- Docker security benchmarks
|
|
528
|
+
- Node.js security guidelines
|
|
529
|
+
|
|
530
|
+
### Data Protection
|
|
531
|
+
|
|
532
|
+
**WordPress Data Handling:**
|
|
533
|
+
|
|
534
|
+
- Minimal data collection
|
|
535
|
+
- Encrypted data transmission
|
|
536
|
+
- Secure credential storage
|
|
537
|
+
- Access logging
|
|
538
|
+
- Data retention policies
|
|
539
|
+
|
|
540
|
+
### Privacy Considerations
|
|
541
|
+
|
|
542
|
+
**User Data:**
|
|
543
|
+
|
|
544
|
+
- Authentication data encrypted
|
|
545
|
+
- No persistent storage of credentials
|
|
546
|
+
- Audit trail maintained
|
|
547
|
+
- Access controls enforced
|
|
548
|
+
|
|
549
|
+
## Security Testing
|
|
550
|
+
|
|
551
|
+
### Automated Testing
|
|
552
|
+
|
|
553
|
+
**Test Suite Coverage:**
|
|
554
|
+
|
|
555
|
+
```bash
|
|
556
|
+
# Run security tests
|
|
557
|
+
npm run test:security
|
|
558
|
+
|
|
559
|
+
# Specific security validations
|
|
560
|
+
npm run test:security:validation
|
|
561
|
+
npm run test:security:penetration
|
|
562
|
+
|
|
563
|
+
# Results: 40/40 security tests passing
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
### Manual Testing
|
|
567
|
+
|
|
568
|
+
**Security Validation:**
|
|
569
|
+
|
|
570
|
+
1. **Authentication Testing**
|
|
571
|
+
- Invalid credential handling
|
|
572
|
+
- Brute force protection
|
|
573
|
+
- Session management
|
|
574
|
+
|
|
575
|
+
2. **Input Validation Testing**
|
|
576
|
+
- XSS prevention
|
|
577
|
+
- SQL injection protection
|
|
578
|
+
- Path traversal prevention
|
|
579
|
+
|
|
580
|
+
3. **Network Security Testing**
|
|
581
|
+
- HTTPS enforcement
|
|
582
|
+
- Rate limiting effectiveness
|
|
583
|
+
- Access control validation
|
|
584
|
+
|
|
585
|
+
### Penetration Testing
|
|
586
|
+
|
|
587
|
+
**Regular Security Assessments:**
|
|
588
|
+
|
|
589
|
+
- Quarterly penetration testing
|
|
590
|
+
- Annual security audits
|
|
591
|
+
- Continuous vulnerability scanning
|
|
592
|
+
- Bug bounty program consideration
|
|
593
|
+
|
|
594
|
+
## Security Support
|
|
595
|
+
|
|
596
|
+
### Reporting Security Issues
|
|
597
|
+
|
|
598
|
+
**Security Contact:**
|
|
599
|
+
|
|
600
|
+
- Email: [Create security email]
|
|
601
|
+
- GPG Key: [Provide GPG key for encrypted communication]
|
|
602
|
+
- Response Time: 24 hours for critical issues
|
|
603
|
+
|
|
604
|
+
**Disclosure Policy:**
|
|
605
|
+
|
|
606
|
+
- Responsible disclosure encouraged
|
|
607
|
+
- 90-day disclosure timeline
|
|
608
|
+
- Security credit provided
|
|
609
|
+
- Bug bounty consideration
|
|
610
|
+
|
|
611
|
+
### Security Resources
|
|
612
|
+
|
|
613
|
+
- **[OWASP WordPress Security](https://owasp.org/www-project-wordpress-security/)**
|
|
614
|
+
- **[WordPress Security Handbook](https://developer.wordpress.org/plugins/security/)**
|
|
615
|
+
- **[Node.js Security Best Practices](https://nodejs.org/en/docs/guides/security/)**
|
|
616
|
+
- **[Docker Security](https://docs.docker.com/engine/security/)**
|
|
617
|
+
|
|
618
|
+
---
|
|
619
|
+
|
|
620
|
+
**Security Concern?** [Report a security issue](mailto:security@example.com) or
|
|
621
|
+
[open a confidential issue](https://github.com/docdyhr/mcp-wordpress/security/advisories/new).
|