Repository navigation
v0.3.3 — Security & Modernization Audit
Summary
Complete security and modernization audit of MU-Migration. 32 defects identified and fixed.
Highlights
- Dependency removal: Replaced abandoned
alchemy/zippywith native PHPZipArchive - PHP 8.0+ required: Updated minimum version, uses
str_contains(),random_bytes(), named constants - Deprecated API cleanup: Replaced
insert_blog(),get_blog_details(),$GLOBALS['current_site'] - Defense-in-depth hardening: Input validation, path traversal guards, atomic file writes, argument sanitization
- CI modernization: Replaced
.travis.ymlwith GitHub Actions
Fixed Defects
| ID | Description |
|---|---|
| DEF-001 | DB prefix format validation |
| DEF-003 | Replace deprecated insert_blog() with wp_insert_site() |
| DEF-006 | Replace deprecated get_blog_details() with get_site() |
| DEF-008 | Zip path traversal protection |
| DEF-010 | Atomic map file writes |
| DEF-011 | Cross-filesystem rename fallback |
| DEF-012 | Idempotent site creation |
| DEF-013 | Plugin destination path validation |
| DEF-017 | Role validation before set_role() |
| DEF-018 | Password hash format validation |
| DEF-019 | Replace deprecated $GLOBALS['current_site'] |
| DEF-020 | Stop resetting $wp_actions |
| DEF-021 | Include all tables with prefix in search-replace |
| DEF-022 | Warn on multiple user matches |
| DEF-025 | Sanitize runcommand() argument keys |
| DEF-026 | Table name validation |
| DEF-027 | Remove error suppression in delete_folder() |
| DEF-028 | Guard fgets() false return |
| DEF-029 | i18n — accepted as-is (CLI tool, no translations) |
| DEF-030 | Atomic rename in addTransaction() |
| DEF-031 | Validate blog_id before switch_to_blog() |
Breaking Changes
- PHP 8.0+ required (was 7.1)
ext-ziprequired (replacesalchemy/zippy)helpers.phpfunctionextract()renamed toextract_zip()
🤖 Generated with Claude Code