Prečo tradičný WordPress nie je bezpečný pre B2B portály

Od nolimeo · 17. marca 2026
banner image

Mnoho stredne veľkých firiem začína svoju digitálnu cestu s populárnymi monolitickými redakčnými systémami (CMS), ako je tradičný WordPress. Sú lacné, ľahko sa inštalujú a pre bežnú prezentačnú webstránku alebo jednoduchý e-shop na WooCommerce predstavujú dobrý štartovací bod.

Problém nastáva v momente, kedy firma vyrastie a rozhodne sa na tomto základe postaviť klientsku B2B zónu alebo partnerský portál. Teda miesto, kde sa partneri prihlasujú, vidia individuálne zmluvy, interné cenníky, fakturačné údaje a stav svojich objednávok.

V tom momente sa z predtým užitočnej platformy môže stať výrazné bezpečnostné riziko. Tradičné monolitické CMS systémy totiž neboli navrhnuté na správu neverejných korporátnych dát. Sú postavené na architektúre, ktorá má z technického hľadiska veľkú verejnú útočnú plochu.

Tento technický článok rozoberá tri štrukturálne riziká monolitických CMS pre B2B prevádzku a ukazuje, ako v technologickom štúdiu nolimeo navrhujeme bezpečnejšie klientske zóny využitím Headless CMS architektúry (Payload CMS / Strapi) skombinovanej s Next.js.


1. Jadro problému: Architektonické slabiny monolitických CMS

Rozdiel medzi tradičným monolitom a modernou headless architektúrou je pre bezpečnosť vašej firmy kľúčový. Predstavuje rozdiel medzi systémom, kde verejný web a administrácia sedia v jednom balíku, a architektúrou, ktorá oddeľuje verejnú vrstvu od dátového jadra.

1. TRADIČNÝ MONOLIT (WordPress) - Rizikový koncept
┌────────────────────────────────────────────────────────┐
│               Verejný Internet / Návštevník            │
└────────────────────────────────────────────────────────┘
                           │
                           ▼ (Priama cesta k jadru)
┌────────────────────────────────────────────────────────┐
│            Exponovaný Admin Panel (/wp-admin)          │
│          Monolitická Aplikácia (Pluginy & Kód)         │
│             Spoločná MySQL Databáza (Dáta)             │
└────────────────────────────────────────────────────────┘

2. HEADLESS ARCHITEKTÚRA (nolimeo) - Bezpečnejší koncept
┌────────────────────────────────────────────────────────┐
│               Verejný Internet / Návštevník            │
└────────────────────────────────────────────────────────┘
                           │
                           ▼ (Bezpečná statická odozva)
┌────────────────────────────────────────────────────────┐
│         Frontend Vrstva (Next.js / Edge Server)        │
│          - Bez priameho prístupu k databáze            │
└────────────────────────────────────────────────────────┘
                           │
                           ▼ (Prísne overované API)
┌────────────────────────────────────────────────────────┐
│          Izolovaný Headless CMS (Payload / Strapi)     │
│         PostgreSQL Databáza (Skrytá vo VPN sieti)       │
└────────────────────────────────────────────────────────┘

Tri hlavné bezpečnostné hrozby monolitických CMS:

Hrozba A: Verejne exponované administračné rozhrania

Pri tradičnom monolite beží používateľský web aj administračný panel na tom istom serveri a na tej istej doméne. Každý útočník na svete presne vie, kde sa nachádza vaša prihlasovacia stránka (napríklad /wp-admin alebo /wp-login.php).

To otvára dvere pre automatizované útoky hrubou silou (Brute-Force), DDoS útoky na autentifikačné rozhranie a zneužívanie zraniteľností v jadre systému alebo pluginoch na získanie vyšších oprávnení k vašim B2B dátam.

Hrozba B: Chaos pluginov tretích strán (Dependency Hell)

Monolitické CMS systémy sú závislé od pluginov tretích strán na zabezpečenie B2B funkcií (napr. správa používateľských rolí, klientske portály, fakturačné exporty). Bežný monolitický portál vyžaduje desiatky pluginov od rôznych neznámych autorov.

Stačí, aby jeden autor zanedbal bezpečnostnú aktualizáciu alebo jeho účet skompromitoval útočník, a do vašej klientskej zóny sa môže dostať škodlivý kód (SQL Injection, Cross-Site Scripting - XSS). Cez neho môžu útočníci získať prístup k dátam klientov, zašifrovaným heslám, obchodným zmluvám alebo individuálnym zľavám.

Hrozba C: Jedna spoločná databáza pre všetko

V monolitickej architektúre zdieľajú verejné články, kategórie, komentáre a citlivé zákaznícke údaje rovnakú SQL databázu a často aj podobné databázové oprávnenia. Ak útočník zneužije chybu vo verejnom formulári na blogu, môže sa dostať bližšie k citlivým firemným cenníkom a zmluvám.


2. Headless CMS: Oddelenie dizajnu od citlivých dát

V štúdiu nolimeo tieto riziká znižujeme prechodom na Headless CMS architektúru (MACH - Microservices, API-first, Cloud-native, Headless).

Pri tomto prístupe oddeľujeme prezentačnú časť (Next.js frontend), s ktorou komunikuje používateľ, od administračnej a dátovej časti (Headless CMS - Payload CMS alebo Strapi).

Prečo je Headless CMS bezpečnejší?

  1. CMS skryté pred svetom: Administračné rozhranie Headless CMS nemusí bežať na vašej verejnej doméne. Môže byť spustené na internej subdoméne chránenej VPN sieťou, IP whitelistom alebo dvojfaktorovou autentifikáciou (2FA). Bežný návštevník tak nemá priamu cestu k administrácii.
  2. Bez priamych dopytov do DB: Next.js frontend načítava dáta z Headless CMS cez zabezpečené API na strane servera (Server-Side Fetching). V prehliadači zákazníka sa nemajú ocitnúť databázové prihlasovacie údaje ani surové SQL dopyty.
  3. Oddelený frontend: Frontend môže byť vygenerovaný ako statická alebo asynchrónna Next.js aplikácia nasadená na globálnej CDN sieti. Neobsahuje databázové jadro ani administračný runtime, ktoré patria do oddelenej vrstvy.

3. Technická implementácia: Bezpečné Server-Side načítavanie dát

Najväčšou výhodou Next.js Server Components je možnosť komunikovať s Headless CMS na strane servera. API tokeny a adresy citlivých dátových serverov zostávajú mimo klientského prehliadača.

Nižšie je príklad našej technickej implementácie v TypeScript s prísnou dátovou validáciou pomocou Zod:

// src/services/cmsService.ts
import { z } from "zod";

const PAYLOAD_CMS_URL = process.env.PAYLOAD_CMS_URL || "https://cms-internal.firma.sk";
const PAYLOAD_API_TOKEN = process.env.PAYLOAD_API_TOKEN || "";

// Zod schéma pre prísnu validáciu B2B zmluvy na strane servera
export const B2BContractSchema = z.object({
  id: z.string().min(1),
  partnerName: z.string().min(2),
  contractNumber: z.string().min(5),
  discountPercentage: z.number().min(0).max(100),
  securePdfUrl: z.string().url(),
  updatedAt: z.string(),
});

export type B2BContract = z.infer<typeof B2BContractSchema>;

/**
 * Bezpečne načíta klientsku zmluvu z izolovaného Headless CMS.
 * Táto funkcia beží výhradne na strane servera. API kľúč a URL adresa CMS
 * sa nikdy nedostanú do prehliadača používateľa.
 */
export async function fetchSecureB2BContract(partnerId: string): Promise<{ success: true; contract: B2BContract } | { success: false; error: string }> {
  // Overenie prítomnosti API kľúča
  if (!PAYLOAD_API_TOKEN) {
    return { success: false, error: "Integračný API token nie je nakonfigurovaný." };
  }

  const targetUrl = `${PAYLOAD_CMS_URL}/api/b2b-contracts/${partnerId}`;

  try {
    const response = await fetch(targetUrl, {
      method: "GET",
      headers: {
        // Autorizácia pomocou API kľúča v bezpečnej hlavičke
        "Authorization": `users API-Key ${PAYLOAD_API_TOKEN}`,
        "Content-Type": "application/json",
      },
      next: {
        revalidate: 1800 // Inkrementálna statická regenerácia (ISR) každých 30 minút
      }
    });

    if (!response.ok) {
      return { success: false, error: `CMS odpovedalo chybovým kódom: ${response.status}` };
    }

    const rawData = await response.json();

    // Validácia dát na prísnu schému pred ich spracovaním na frontende
    const validationResult = B2BContractSchema.safeParse(rawData);

    if (!validationResult.success) {
      const fieldErrors = validationResult.error.errors.map(err => `${err.path.join(".")}: ${err.message}`).join(", ");
      return { success: false, error: `Dátová nekonzistencia v CMS: ${fieldErrors}` };
    }

    return { success: true, contract: validationResult.data };
  } catch (error: any) {
    console.error(`Chyba načítavania kontraktu pre partnera ${partnerId}:`, error.message);
    return { success: false, error: `Komunikačné zlyhanie: ${error.message}` };
  }
}

Výhody tejto architektúry:

  • Oddelenie citlivých údajov: Prehliadač klienta vidí len finálnu odpoveď. API kľúč PAYLOAD_API_TOKEN a interná adresa cms-internal.firma.sk zostávajú na serveri.
  • Validácia dát: Ak by z CMS prišli dáta v nečakanej štruktúre, Zod validácia ich zachytí a nepovolí vykreslenie nevalidného obsahu.

4. Porovnanie: Tradičný WordPress vs. headless CMS (Payload / Next.js)

Bezpečnosť vašich klientskych dát určuje stabilitu vášho podnikania:

Bezpečnostný parameter Tradičný monolit (WordPress / Woo) Headless CMS (Payload / Next.js)
Umiestnenie admin panelu Verejne prístupné (napr. /wp-admin) Skryté na privátnej subdoméne / VPN sieti
Priame dopyty do databázy Často áno (požiadavka zasahuje DB cez CMS runtime) Nie z prehliadača (dáta idú cez serverové API vrstvy)
Používanie pluginov tretích strán Vysoké (často desiatky pluginov) Nízke (kód a integrácie pod kontrolou vývojového tímu)
Riziko SQL injection a XSS Vyššie pri neudržiavaných pluginoch a témach Nižšie pri správnom návrhu (oddelená DB, validácia, API vrstva)
Rýchlosť a odozva (TTFB) Často horšia pri dynamickom generovaní stránky Rýchla pri správnom cacheovaní (ISR, CDN, serverové fetchovanie)

Záver: Nerobte kompromisy v bezpečnosti vašich klientov

Únik B2B cenníkov, klientskych zmlúv alebo faktúr môže pre stredne veľkú firmu znamenať problém z pohľadu GDPR, zmluvných záväzkov a dôvery, ktorú ste si u partnerov budovali dlhé roky. Spoliehať sa na lacný WordPress so zastaranými pluginmi pri správe citlivých obchodných dát je zbytočný hazard.

V technologickom štúdiu nolimeo nerobíme z bezpečnosti dekoráciu na konci projektu. Zameriavame sa na stabilný, bezpečný enterprise softvér, vlastné architektúry a riešenia bez hotových šablón. Pri spolupráci s nami komunikujete priamo so senior vývojármi. Získate modernú, rýchlu a udržateľnú headless architektúru na mieru, ktorá chráni reputáciu a dáta vašej firmy.

Napíšte nám a prejdeme si bezpečnosť vašej klientskej zóny, dátový model aj vhodnú headless architektúru.

Máte záujem posunúť váš projekt vpred?