Radek Krejčí

AI a bezpečnost

Chtěl jsem používat AI pro správu skutečného obsahu, aniž bych jí otevřel databázi nebo předal neomezený administrátorský účet. V LydiaCMS jsem proto AI zapojil jako samostatného uživatele: k systému přistupuje přes MCP, smí provádět jen povolené operace a každá změna prochází stejnou autorizací a auditem jako zásah člověka.

Proč AI nepřistupuje přímo k databázi

Přímý přístup k databázi by byl jednoduchý, ale obcházel by validace, oprávnění a audit v aplikační vrstvě. AI by mohla zapsat technicky platná data, která porušují pravidla systému, nebo změnit záznam bez dostatečné informace o tom, kdo a proč změnu provedl.

Neomezený administrátorský účet by sice zachoval aplikační vrstvu, ale poskytl by zbytečně široká oprávnění. Zvolil jsem proto samostatného servisního uživatele, kterému mohu pro každý způsob použití povolit jen potřebné operace.

Jak MCP používám

Tímto způsobem upravuji také tento web: měním texty a SEO vlastnosti stránek, nahrávám obrázky nebo připravuji překlady. Místo ručního procházení formulářů mohu zadat úkol v konverzaci a před uložením nebo po něm zkontrolovat konkrétní výsledek.

MCP nástroje vznikají z registrovaných endpointů administračního API. Jmenují se podle operace, například core_pages_update nebo core_translations_set. Další balíčky mohou stejným způsobem přidat vlastní nástroje.

Zdrojový kód HTTP rozhraní je v repozitáři lydiacms-api.

MCP není bezpečnostní hranice

MCP je způsob, jak AI zpřístupnit konkrétní operace, nikoli bezpečnostní hranice. Tu v LydiaCMS tvoří identita uživatele, jeho oprávnění, kontrola ACL, validace v aplikační vrstvě a audit změn.

Stejný nástroj proto může mít pro dva uživatele odlišný výsledek: operace se provede pouze tehdy, pokud ji konkrétní uživatel smí použít nad daným záznamem.

Co se stane při jednom volání

  1. ChatGPT, Codex nebo jiný MCP klient vybere nástroj a připraví jeho vstupní data.
  2. MCP server určí uživatele, pod kterým se požadavek provede. U vzdáleného HTTP přístupu ho identifikuje Bearer token.
  3. Token omezuje dostupná oprávnění a každá operace navíc prochází stejnou kontrolou ACL jako administrace.
  4. Úspěšná změna se uloží běžnou aplikační vrstvou a zapíše do auditního logu se svou původní a novou hodnotou.

Omezení oprávnění

Pro AI používám samostatného uživatele, kterému přiděluji pouze oprávnění potřebná pro konkrétní úkol. Nemá oprávnění ke správě uživatelů ani rolí. Současně platí systémové pravidlo, že uživatel nemůže přidělit více práv, než má sám. Strom kontextů a dědění pravidel popisuji v části Architektura.

Při vzdáleném přístupu přes HTTP je Bearer token navázaný na konkrétního uživatele a sadu povolených oprávnění. Bez platného tokenu server požadavek odmítne. Vzdálený MCP endpoint je navíc nutné výslovně zapnout.

Audit a vracení změn

U obsahových záznamů audit ukládá původní a novou hodnotu. V administraci proto vidím, kdo změnu provedl a která pole upravil. Vybranou změnu mohu vrátit; samotné vrácení se zapíše jako další auditní událost.

Okno se změnami v auditním logu LydiaCMS: rozdíl názvu stránky a tlačítko Vrátit tuto změnu
Auditní log ukazuje rozdíl hodnot a nabízí vrácení podporované změny.

Vrácení je možné jen tehdy, pokud se dotčená pole od původní změny znovu nezměnila. Při konfliktu systém operaci odmítne, aby nepřepsal novější práci. Tato funkce je určená pro podporované obsahové záznamy; nenabízím ji pro uživatele a role.

Filtrování HTML obsahu

Text přijatý přes MCP prochází stejným zpracováním jako obsah uložený z administrace. HTMLPurifier ponechá jen povolené značky a atributy a odstraní skripty nebo nepovolené atributy. Nejde o obecnou ochranu před každým typem útoku, ale o další vrstvu pro obsahová pole s HTML.

Jeden protokol, dva transporty

  • Lokální STDIO v lydiacms/core. MCP klient spustí příkaz lydiacms:mcp přes Docker, CLI nebo SSH. Není k tomu potřeba veřejný HTTP endpoint.
  • Streamable HTTP v lydiacms/api. Stejné nástroje lze zpřístupnit na adrese /api/mcp a požadavky ověřovat Bearer tokenem.

Cena zvoleného řešení

Řízený přístup přes MCP je bezpečnější než přímý zápis do databáze, ale vyžaduje další práci a průběžnou kontrolu.

  • Každou novou operaci musím bezpečně navrhnout, přiřadit jí oprávnění a udržovat její implementaci.
  • Kompromitovaný token umožňuje používat přidělená oprávnění až do jeho zneplatnění.
  • Audit a vracení změn pokrývají podporované obsahové záznamy, ne všechny typy dat a operací.
  • Výsledek práce AI stále kontroluji; automatizace nenahrazuje odpovědnost za uloženou změnu.

Výsledkem není zvláštní bezpečnostní režim pro AI. AI používá stejnou aplikační vrstvu jako člověk a audit s možností vrácení zůstává pojistkou, nikoli náhradou autorizace.

← LydiaCMS

Kontakt

Hledáte posilu do PHP týmu?

Pokud řešíte nový backendový projekt, integraci nebo potřebujete posílit vývoj existujícího systému, napište mi.