# Women Unlimited Domain: womenunlimited.africa Owner: Women Unlimited (SA NGO client) Stack: Divi, WooCommerce, Peach Payments, Wordfence, FastPixel ## Security incident — 2026-07-31 **Issue:** `wp-content/debug.log` (3.96 MB) publicly accessible at `https://womenunlimited.africa/wp-content/debug.log`. Flagged by Wordfence as Critical (Public Files). **Root cause:** Three compounding issues: 1. `WP_DEBUG` set to `true` in `wp-config.php` — production site was logging every PHP warning/fatal to `debug.log` 2. `.htaccess` in `wp-content/` had ` Deny from all` using Apache 2.2 syntax (`Order deny,allow`) — **LiteSpeed ignores this syntax**, so the rule was dead 3. No LiteSpeed vhost context blocking the file, so it was served directly with `HTTP 200` **Fix applied:** 1. `wp-config.php`: `define('WP_DEBUG', true)` → `false` (line 89). Backups at `*.bak-20260731-0422`. 2. `wp-content/.htaccess`: replaced broken Apache 2.2 deny rule with LiteSpeed-compatible `Require all denied` block (defence in depth) 3. `/usr/local/lsws/conf/vhosts/womenunlimited.africa/vhost.conf`: added exact-path context block (the regex `~ "debug\.log$"` form did NOT match — only exact-path `/wp-content/debug.log` worked): ``` context /wp-content/debug.log { allowBrowse 0 accessControl { deny * } } ``` 4. Cloudflare cache purged via API (`/zones/{id}/purge_cache`) — single URL purges need a wait, `purge_everything:true` is more reliable 5. Stale `debug.log` file deleted from disk **Verification:** - `curl -sI https://womenunlimited.africa/wp-content/debug.log` → **HTTP 403** (was 200, 4MB) - File no longer being written to (WP_DEBUG off) - Homepage still 200, `wp-config.php` still protected **Lesson — regex context in LiteSpeed:** The regex `~ "pattern$"` form works for things like `\\.user\\.ini$` and `wp-config\\.php$` but did NOT match `debug\\.log$` on this vhost. Exact-path context (`context /wp-content/debug.log`) is the reliable form for blocking specific files. See `wiki/web/litespeed.md` for follow-up note. --- # Women Unlimited Performance Audit Date: 2026-05-20 Score: 78 mobile vs Myreton 93 ## Key Metrics Gap | Metric | WU | Myreton | |--------|-----|---------| | Performance | 78 | 93 | | TBT | 470ms | 10ms | | Speed Index | 4.2s | 1.8s | | LCP | 3.1s | 2.9s | | Scripts loading | 47 | ~25 | ## Root Causes (Priority Order) ### 1. WooCommerce loading on every page (HIGH IMPACT) WooCommerce loads 7 JS files on the homepage including add-to-cart.min.js, jquery.blockUI, woocommerce.min.js, js-cookie - none needed on homepage. Divi also loads theme-scripts-library-woocommerce.js globally. Fix: Use Code Snippets or Asset CleanUp plugin to dequeue WC scripts on non-shop/cart/checkout pages. ### 2. DiviFlash loading 5 scripts globally (HIGH IMPACT) lightgallery.js, swiper.min.js, contentcarousel.js, blogCarousel.js, df-menu-ext-script.js all load on every page regardless of whether DiviFlash modules are used on that page. Fix: DiviFlash has per-module asset loading setting - enable it. Dashboard > DiviFlash > Performance > Load assets only when module is used. ### 3. Mapster Maps + Google Maps loading globally (MEDIUM) Google Maps API (googleapis.com) detected loading on homepage - map is not on homepage. Complianz is blocking it but the script tag is still being enqueued and parsed. Fix: Dequeue mapster scripts on pages without a map. ### 4. wp-security-audit-log frontend hook (LOW-MEDIUM) WSAL (wp-security-audit-log) has known frontend performance overhead from its hooks. Not on Myreton. Fix: Verify it's needed - MainWP Child handles most audit needs. If just for security logging, Wordfence already covers activity. Consider deactivating. ### 5. 40/47 scripts have no defer/async (MEDIUM) FastPixel's JS optimisation should be deferring these but TBT of 470ms suggests it's not fully working - possibly because WooCommerce scripts have jQuery dependencies that prevent deferral. Fix: In FastPixel settings, add woocommerce scripts to excludes and handle them separately, or use a dedicated WC performance plugin. ### 6. Peach Payments (LOW on homepage, HIGH on checkout) Not loading on homepage but will heavily impact checkout page score. Not a homepage issue but worth noting for overall site performance. ## FastPixel Settings Comparison Both sites have identical FastPixel config - not a settings issue. ## Quick Wins (Do These First) 1. DiviFlash > Performance > per-module asset loading = biggest gain for effort 2. Deactivate wp-security-audit-log if not essential 3. Dequeue WooCommerce scripts on non-WC pages via mu-plugin ## Expected Score After Fixes TBT should drop from 470ms to ~50-80ms = Performance score ~88-92