# 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