Skip to content

Security & Compliance

Security Measures

MeasureImplementationSource
Admin lockdowndezeen-admin-lockdown pluginRestricts login pages
WAFCloudflare WAF rulesDDoS protection, bot filtering
XMLRPC blockedVarnish layerBlocks /xmlrpc.php requests
SSL enforcementFORCE_SSL_ADMIN constantForces HTTPS for admin
File editing disabledWordPress hardeningPrevents in-admin file edits
Server tokensApache ServerTokens ProdHides server version
Directory listingOptions -IndexesDisabled globally
Trace disabledTraceEnable OffPrevents HTTP TRACE
Security scanningWP Defender Pro 4.11.0Vulnerability scans, hardening
Spam protectionAkismet 5.6Comment/form spam filtering
Application passwordsapplication-passwords pluginREST API auth alternative
JWT authenticationjwt-auth plugin 3.0.2Token-based API auth

Authentication & Access

WordPress Admin

  • Primary access via admin.dezeen.com (dedicated server)
  • Standard WordPress username/password authentication
  • Admin lockdown plugin restricts login page access

REST API Authentication

Two methods:

  1. JWT Auth — Token-based authentication for the Laravel Platform integration
    • Secret key: JWT_AUTH_SECRET_KEY in wp-config.php
    • Whitelisted endpoints in mu-plugin rest-api-v2.php
  2. Application Passwords — WordPress native API authentication for external tools

Platform Integration

The Laravel Platform at /platform (Awards, Competitions) authenticates via JWT. The PLATFORM_URL and AWARDS_URL constants control the integration endpoint.

GDPR & Privacy

RequirementImplementation
Data collectionSite is a read-only magazine; no user accounts are stored on the WordPress side
Cookie consentManaged via Google Ad Manager and Cookiebot (Usercentrics)
NewsletterCampaign Monitor handles email data; GDPR compliance is Campaign Monitor's responsibility
CommentsDisqus handles comment data; Disqus's privacy policy applies
AnalyticsParse.ly for content analytics
AdvertisingGoogle Ad Manager with consent signals

Adds data-cookieconsent attributes to script tags so Cookiebot can gate non-essential scripts. Hooks into script_loader_tag to modify <script> elements.

Cookiebot Integration

  • Plugin: Cookiebot by Usercentrics 4.6.2
  • Provides automatic cookie scanning and blocking
  • GDPR/CCPA compliant banner
  • Google Consent Mode v2 integration

Third-Party Data Flows

ServiceData SentData ReceivedStorage
AlgoliaPost content, metadataSearch resultsAlgolia cloud
Campaign MonitorEmail addressesSubscription statusCM servers
DisqusPage URLCommentsDisqus servers
Apple NewsArticle contentPublish statusApple servers
CloudflareAll traffic (proxy)Cached responsesCloudflare edge
Google Ad ManagerPage context, consentAd creativesGoogle servers
Parse.lyPage views, metadataAnalytics dataParse.ly cloud
PayPal/StripePayment info (Awards)Transaction statusPayPal/Stripe
GeoTargetingWPUser IPCountry codeCookie-based

Secrets Management

Secrets are stored in wp-config.php which is not in version control. The wp-config-sample.php template contains placeholder values.

Secrets to Rotate on Handover

  • WordPress authentication salts (AUTH_KEY, SECURE_AUTH_KEY, etc.)
  • JWT_AUTH_SECRET_KEY
  • Algolia API keys (especially write keys)
  • Campaign Monitor API keys
  • PayPal/Stripe credentials
  • Database credentials

Footgun Warning

The wp-config.php in the repository contains real API keys and database credentials for the development environment. These should be treated as compromised and rotated for any non-local environment.

Nginx Security (Legacy)

The _provision/ folder contains Nginx configuration from a previous setup:

  • restrictions.conf: Blocks access to hidden files, wp-config.php, readme.html, xmlrpc.php
  • wordpress.conf: WordPress-specific rewrite rules

These may not be active if production uses Apache, but provide reference for security headers.

Unknowns / Needs Verification

  • Whether FORCE_SSL_ADMIN is true in production wp-config
  • Exact Cloudflare WAF rules in place
  • Whether WordPress file editing is disabled in production (DISALLOW_FILE_EDIT)
  • Two-factor authentication availability for admin users
  • Rate limiting configuration (Cloudflare or application level)
  • Audit logging for admin actions