SiamCafe.net Blog
Cybersecurity

WordPress Headless Shift Left Security

wordpress headless shift left security
WordPress Headless Shift Left Security | SiamCafe Blog
2025-09-19· อ. บอม — SiamCafe.net· 9,764 คำ

Headless WordPress Security

WordPress Headless Shift Left Security REST API WPGraphQL JWT CORS Rate Limiting SAST DAST SCA CI/CD WAF Next.js Nuxt.js

Attack SurfaceTraditional WPHeadless WPMitigation
Theme Vulnerabilityสูงไม่มี (ไม่ใช้ Theme)-
Plugin Vulnerabilityสูงปานกลาง (ใช้น้อยลง)WPScan + SCA
API Endpointต่ำ (ไม่ค่อยใช้)สูง (ใช้เป็นหลัก)Auth + Rate Limit
Admin Loginสูง (เปิด Public)ปานกลาง (ซ่อนได้)IP Whitelist + MFA
XSSสูง (Theme)ปานกลาง (API)Input Validation + CSP

API Security Configuration

# === WordPress Headless API Security ===

# wp-config.php Security Headers
# // Disable XML-RPC (not needed for headless)
# define('XMLRPC_DISABLED', true);
#
# // Limit REST API to authenticated users for write operations
# add_filter('rest_authentication_errors', function($result) {
#     if (!is_user_logged_in() && $_SERVER['REQUEST_METHOD'] !== 'GET') {
#         return new WP_Error('rest_forbidden', 'Authentication required', ['status' => 401]);
#     }
#     return $result;
# });
#
# // Disable user enumeration via REST API
# add_filter('rest_endpoints', function($endpoints) {
#     if (isset($endpoints['/wp/v2/users'])) {
#         unset($endpoints['/wp/v2/users']);
#     }
#     return $endpoints;
# });
#
# // CORS Configuration
# add_action('rest_api_init', function() {
#     remove_filter('rest_pre_serve_request', 'rest_send_cors_headers');
#     add_filter('rest_pre_serve_request', function($value) {
#         header('Access-Control-Allow-Origin: https://frontend.example.com');
#         header('Access-Control-Allow-Methods: GET, OPTIONS');
#         header('Access-Control-Allow-Headers: Authorization, Content-Type');
#         return $value;
#     });
# });

from dataclasses import dataclass

@dataclass
class SecurityConfig:
    config: str
    purpose: str
    implementation: str
    impact: str

configs = [
    SecurityConfig("Disable XML-RPC",
        "ปิด XML-RPC ไม่จำเป็นสำหรับ Headless",
        "define('XMLRPC_DISABLED', true) หรือ Plugin",
        "ลด Attack Surface Brute Force Pingback DDoS"),
    SecurityConfig("REST API Auth",
        "บังคับ Auth สำหรับ Write Operations",
        "rest_authentication_errors filter",
        "ป้องกัน Unauthorized Data Modification"),
    SecurityConfig("Disable User Endpoint",
        "ปิด /wp/v2/users ป้องกัน User Enumeration",
        "rest_endpoints filter unset users",
        "ป้องกัน Attacker รู้ Username"),
    SecurityConfig("CORS Strict",
        "อนุญาตเฉพาะ Frontend Domain",
        "Access-Control-Allow-Origin: frontend.example.com",
        "ป้องกัน Cross-origin API Abuse"),
    SecurityConfig("Rate Limiting",
        "จำกัด Request ต่อ IP",
        "Nginx limit_req หรือ Plugin WP Rate Limit",
        "ป้องกัน DDoS API Scraping"),
    SecurityConfig("JWT Authentication",
        "ใช้ JWT แทน Cookie Auth สำหรับ API",
        "WP JWT Auth Plugin + Bearer Token",
        "Stateless Auth เหมาะกับ Headless"),
]

print("=== Security Configs ===")
for c in configs:
    print(f"  [{c.config}] {c.purpose}")
    print(f"    Impl: {c.implementation}")
    print(f"    Impact: {c.impact}")

CI/CD Security Pipeline

# === Shift Left Security Pipeline ===

@dataclass
class PipelineStage:
    stage: str
    tools: str
    checks: str
    gate: str

pipeline = [
    PipelineStage("1. Pre-commit",
        "GitLeaks + Husky",
        "Secret Detection: API Key Password Token ที่ Hardcode",
        "Block Commit ถ้ามี Secret"),
    PipelineStage("2. PR - SAST",
        "Semgrep + SonarQube",
        "Code Vulnerability, SQL Injection, XSS, SSRF Pattern",
        "Block Merge ถ้ามี Critical/High"),
    PipelineStage("3. PR - SCA",
        "WPScan + Snyk + npm audit",
        "WordPress Plugin/Theme CVE, npm Package Vulnerability",
        "Block Merge ถ้ามี Critical"),
    PipelineStage("4. Build - Image Scan",
        "Trivy + Grype",
        "Docker Image Vulnerability, OS Package CVE",
        "Block Deploy ถ้ามี Critical"),
    PipelineStage("5. Staging - DAST",
        "OWASP ZAP + Nuclei + WPScan",
        "API Endpoint Security, Headers, CORS, Auth Bypass",
        "Block Production Deploy ถ้ามี High+"),
    PipelineStage("6. Production - Monitor",
        "WAF + Uptime + Log Analysis",
        "API Abuse, Brute Force, Suspicious Activity",
        "Alert SOC + Auto-block IP"),
]

print("=== Security Pipeline ===")
for p in pipeline:
    print(f"\n  [{p.stage}]")
    print(f"    Tools: {p.tools}")
    print(f"    Checks: {p.checks}")
    print(f"    Gate: {p.gate}")

Production Hardening

# === WordPress Production Hardening ===

@dataclass
class HardeningRule:
    rule: str
    config: str
    risk_mitigated: str

hardening = [
    HardeningRule("Hide wp-admin",
        "ใช้ Plugin WPS Hide Login เปลี่ยน URL + IP Whitelist",
        "Brute Force Attack บน Login Page"),
    HardeningRule("MFA for Admin",
        "บังคับ Two-Factor Authentication ทุก Admin Account",
        "Credential Stuffing Account Takeover"),
    HardeningRule("Security Headers",
        "X-Content-Type-Options X-Frame-Options CSP HSTS",
        "XSS Clickjacking MIME Sniffing"),
    HardeningRule("File Permission",
        "wp-config.php 400, .htaccess 444, uploads 755",
        "File Modification Malware Upload"),
    HardeningRule("Database Prefix",
        "เปลี่ยน wp_ เป็น Custom Prefix",
        "SQL Injection ที่ Target Default Table Name"),
    HardeningRule("Auto Update",
        "เปิด Auto Update สำหรับ Core Minor + Plugin Security",
        "Known Vulnerability ที่มี Patch แล้ว"),
    HardeningRule("Backup Strategy",
        "Daily Backup Database + Files ไป Off-site Storage",
        "Data Loss Ransomware Accidental Delete"),
]

print("=== Hardening Rules ===")
for h in hardening:
    print(f"  [{h.rule}]")
    print(f"    Config: {h.config}")
    print(f"    Mitigates: {h.risk_mitigated}")

เคล็ดลับ

Headless WordPress คืออะไร

WordPress Backend CMS REST API WPGraphQL Frontend Next.js Nuxt.js Astro SSR SSG Performance Security ลด Attack Surface CDN Cache

Shift Left Security คืออะไร

Security Testing ตั้งแต่ต้น Plugin Scan API Endpoint Auth CORS Rate Limit Secret SAST DAST SCA CI/CD PR Block Quality Gate

API Security ทำอย่างไร

JWT Auth REST API Filter CORS Strict Rate Limiting Input Validation Disable User Endpoint WAF Monitor XML-RPC Disabled Security Headers

CI/CD Security Pipeline ทำอย่างไร

Pre-commit GitLeaks SAST Semgrep SCA WPScan Snyk Image Trivy DAST OWASP ZAP Nuclei Production WAF Monitor Block Deploy Quality Gate

สรุป

WordPress Headless Shift Left Security REST API JWT CORS Rate Limit SAST DAST SCA WPScan CI/CD WAF MFA Hardening Production Monitor

📖 บทความที่เกี่ยวข้อง

Text Generation WebUI Shift Left Securityอ่านบทความ → WordPress Headless Agile Scrum Kanbanอ่านบทความ → WordPress Headless Low Code No Codeอ่านบทความ → PagerDuty Incident Shift Left Securityอ่านบทความ → TCP BBR Congestion Shift Left Securityอ่านบทความ →

📚 ดูบทความทั้งหมด →