[{"data":1,"prerenderedAt":811},["ShallowReactive",2],{"blog-llm-output-guardrails-moderation-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":27,"sources":35,"cover":66,"og":67,"expertise":68,"locales":69,"lang":72,"title":73,"description":74,"coverAlt":75,"metaTitle":76,"takeaways":77,"faq":83,"toc":99,"blocks":133,"others":529},"llm-output-guardrails-moderation","2026-10-17",13,"security",[9,10,11,12,13],"LLM security","Guardrails","Content moderation","OWASP","Output validation",[15,16,17,18,19,20,21,22,23,24,25,26],"llm output guardrails","improper output handling llm","owasp llm05","openai moderation api","omni-moderation-latest","llama guard 4","nemo guardrails streaming","markdown image exfiltration","sanitize llm output html","groundedness detection","llm content moderation production","output rails",[28,30,33],{"name":11,"url":29},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContent_moderation",{"name":31,"url":32},"Cross-site scripting","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCross-site_scripting",{"name":12,"url":34},"https:\u002F\u002Fowasp.org\u002F",[36,39,42,45,48,51,54,57,60,63],{"title":37,"url":38},"OWASP GenAI Security Project: LLM05:2025 Improper Output Handling","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm052025-improper-output-handling\u002F",{"title":40,"url":41},"OpenAI API Docs: Moderation","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fmoderation",{"title":43,"url":44},"Meta: Llama Guard 4 model card and prompt formats","https:\u002F\u002Fwww.llama.com\u002Fdocs\u002Fmodel-cards-and-prompt-formats\u002Fllama-guard-4\u002F",{"title":46,"url":47},"NVIDIA NeMo Guardrails: Output rail streaming configuration","https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fguardrails\u002Fconfigure-guardrails\u002Fyaml-schema\u002Fstreaming\u002Foutput-rail-streaming.md",{"title":49,"url":50},"Microsoft Learn: Prompt Shields in Azure AI Content Safety","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-services\u002Fcontent-safety\u002Fconcepts\u002Fjailbreak-detection",{"title":52,"url":53},"Microsoft Learn: Groundedness detection in Azure AI Content Safety","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-services\u002Fcontent-safety\u002Fconcepts\u002Fgroundedness",{"title":55,"url":56},"Microsoft Learn: Protected material detection in Azure AI Content Safety","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-services\u002Fcontent-safety\u002Fconcepts\u002Fprotected-material",{"title":58,"url":59},"Guardrails AI documentation","https:\u002F\u002Fwww.guardrailsai.com\u002Fdocs",{"title":61,"url":62},"Vue.js docs: Security best practices","https:\u002F\u002Fvuejs.org\u002Fguide\u002Fbest-practices\u002Fsecurity.html",{"title":64,"url":65},"Simon Willison: Remote prompt injection in GitLab Duo leads to source code theft","https:\u002F\u002Fsimonwillison.net\u002F2025\u002FMay\u002F23\u002Fremote-prompt-injection-in-gitlab-duo\u002F","\u002Fimages\u002Fblog\u002Fllm-output-guardrails-moderation\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-output-guardrails-moderation\u002Fog.jpg","ai-engineer",[70,71,72],"en","de","hu","LLM output guardrailek: moderáció, biztonságos megjelenítés és ellenőrzés, mielőtt bármi történne","Mit kell ellenőrizni a modell válasza után: biztonságos Markdown, sémaellenőrzés műveletek előtt, moderációs osztályozók, streaming és megalapozottság.","Három szűkülő téglalap alkot tölcsért, pontok hullanak át egy tálcába a lakat mellett.","LLM output guardrailek és moderáció · Balázs Csorba",[78,79,80,81,82],"Az OWASP LLM05:2025 a modell kimenetét a következő rendszer megbízhatatlan bemenetének tekinti, legyen az böngésző, adatbázis, shell vagy e-mail sablon.","A valódi kimeneti incidensek többsége megjelenítési és műveleti hiba, nem sértő szöveg, ezért először a Markdownt tisztítsd, és korlátozd a képeket és linkeket.","A strukturált kimenetet séma és allowlist alapján ellenőrizd, mielőtt bármilyen műveletet indítana; soha ne add eval-nak, shellnek vagy összefűzött SQL-nek.","Az olyan moderációs osztályozók, mint az omni-moderation-latest vagy a Llama Guard 4, jelzést adnak, nem ítéletet; a küszöböket és a teendőket kategóriánként te döntöd el.","A streaming átrendezi a kompromisszumot: vagy láthat a felhasználó egy chunkot a tiltás előtt, vagy minden chunk megfizeti az ellenőrzés késleltetését.",[84,87,90,93,96],{"q":85,"a":86},"Mi az improper output handling?","Az OWASP LLM Top 10 LLM05:2025 pontja: a modell kimenetének elégtelen ellenőrzése, tisztítása és kezelése, mielőtt más komponensekhez kerül. Tipikus következménye az XSS a böngészőben, az SQL injection, a path traversal vagy a távoli kódfuttatás a backenden.",{"q":88,"a":89},"Elég az OpenAI moderációs végpontja output guardrailnek?","A tartalombiztonsági kategóriákat lefedi, például a gyűlöletkeltést, zaklatást, önsértést, szexuális tartalmat, erőszakot és az illegális tevékenységre vonatkozó tanácsokat, és ingyenes. Azt viszont nem vizsgálja, hogy a HTML biztonságosan megjeleníthető-e, hogy a válasz megalapozott-e, vagy hogy egy eszközhívás engedélyezett-e. Egy réteg a sok közül.",{"q":91,"a":92},"Moderálható egy streamelt válasz?","Igen, de választani kell. Az OpenAI az inline moderációs pontszámokat csak a teljes kimenet elkészülte után adja vissza. A NeMo Guardrails alapértelmezetten 200 tokenes chunkokat ellenőriz, és minden chunkot vagy az ellenőrzés előtt streamel, vagy visszatart, amíg az ellenőrzés át nem megy.",{"q":94,"a":95},"Blokkoljam vagy írjam át a megjelölt kimenetet?","A kategóriától függ. Egyértelmű biztonsági sértésnél blokkold és cseréld fix üzenetre, kiszivárgott személyes adatnál vagy titoknál takard ki, a határeseteket és az üzletkritikus eseteket pedig küldd emberhez. Minden döntést naplózz a pontszámokkal együtt, hogy hangolni tudd a küszöböket.",{"q":97,"a":98},"Hogyan előzhető meg a Markdown képekkel történő adatszivárogtatás?","Ne jeleníts meg a modell kimenetéből tetszőleges domainre mutató képet vagy linket. Használj host-allowlistet, minden mást a szerveren távolíts el vagy írj át, kapcsold ki a nyers HTML-t a Markdown rendererben, és állíts be szigorú Content Security Policyt.",[100,103,106,109,112,115,118,121,124,127,130],{"id":101,"title":102},"output-is-untrusted-input","A modell kimenete megbízhatatlan bemenet a következő rendszer számára",{"id":104,"title":105},"four-jobs","Négy különböző feladat, amit mind guardrailnek hívnak",{"id":107,"title":108},"render-safely","Úgy jelenítsd meg a Markdownt, mintha támadó írta volna",{"id":110,"title":111},"validate-before-acting","Ellenőrizd a strukturált kimenetet, mielőtt bármit kiváltana",{"id":113,"title":114},"moderation-classifiers","Moderációs osztályozók: mit vizsgálnak a fő lehetőségek",{"id":116,"title":117},"streaming","Streaming: előbb megmutatni vagy előbb ellenőrizni",{"id":119,"title":120},"groundedness-and-leakage","Megalapozottság és szivárgás ellenőrzése",{"id":122,"title":123},"actions-and-thresholds","Blokkolás, kitakarás, átírás vagy eszkalálás",{"id":125,"title":126},"layered-pipeline","Mindez egyetlen szerverútvonalban",{"id":128,"title":129},"testing-guardrails","A guardraileket úgy teszteld, mint bármely más funkciót",{"id":131,"title":132},"sources","Források",[134,144,147,150,162,165,166,169,207,210,211,214,229,231,237,238,246,267,275,276,279,309,320,330,337,338,353,369,375,376,384,392,393,396,440,447,448,451,458,460,472,473,476,491,494,495],{"type":135,"content":136},"paragraph",[137,138,143],"A guardrailekről szóló viták többsége a bemenetnél kezdődik: prompt injection, jailbreak, felhasználók, akik olyasmit kérnek, amit nem kellene megkapniuk. Ez a fele is fontos, írtam is róla a ",{"tag":139,"to":140,"children":141},"link","\u002Fblog\u002Fprompt-injection-lethal-trifecta-patterns",[142],"prompt injection elleni védekezés"," cikkben. Ez a bejegyzés a másik feléről szól. Amikor a modell válaszolt, a szövege valahová megy: Markdownként megjelenített chatbuborékba, egy JSON-parserbe, amely visszatérítést indít, egy e-mail sablonba, egy SQL-lekérdezésbe. Mindegyik célnak megvannak a saját szabályai arról, mi biztonságos, és a modell egyiket sem ismeri.",{"type":135,"content":145},[146],"Az LLM-alkalmazásokra vonatkozó OWASP Top 10 ezt a kockázatot LLM05:2025 Improper Output Handling néven tartja számon. Az alábbiakban leírom, hogyan építem fel a kimeneti ellenőrzéseket éles funkciókban: mit és hogyan jelenítünk meg, mit validálunk egy művelet előtt, hol a helye a moderációs osztályozóknak, mit változtat mindezen a streaming, és hogyan döntsünk a blokkolás, az átírás és az eszkalálás között.",{"type":148,"level":149,"id":101,"text":102},"heading",2,{"type":135,"content":151},[152,153,157,158,161],"Az OWASP szerint az improper output handling a modell kimenetének elégtelen ellenőrzése, tisztítása és kezelése, mielőtt továbbkerül. A bejegyzés példái hétköznapi webes sérülékenységek, csak új forrásból: ",{"tag":154,"children":155},"code",[156],"exec","-nek vagy ",{"tag":154,"children":159},[160],"eval","-nak átadott kimenet, a böngésző által XSS-ként értelmezett JavaScript vagy Markdown, paraméterezés nélkül futtatott generált SQL, a kimenetből összerakott fájlútvonalak és escape nélkül e-mail sablonba tett tartalom.",{"type":135,"content":163},[164],"Azért érdemel külön kategóriát, mert a támadónak nem kell hozzáférnie a kimenetedhez. Közvetett prompt injectionnel egy dokumentum, termékértékelés vagy weboldal, amelyet a modell elolvas, befolyásolhatja, mit ír. Az OWASP pontosan ezt említi a hatást növelő tényezők között, a végfelhasználóénál szélesebb modelljogosultságok és a kontextusfüggő kódolás hiánya mellett. Az első javasolt védekezés egyértelmű: kezeld a modellt úgy, mint bármely más felhasználót, és alkalmazz zero trustot arra, amit visszaad.",{"type":148,"level":149,"id":104,"text":105},{"type":135,"content":167},[168],"Az output guardrailek körüli zavar részben abból fakad, hogy a szó négy, eltérő eszközt és eltérő felelőst igénylő feladatot takar. Tervezési átnézéseken külön kezelem őket, mert az a csapat, amelyik vett egy moderációs API-t, gyakran azt hiszi, hogy mind a négyet lefedte.",{"type":170,"head":171,"rows":178},"table",[172,174,176],[173],"Feladat",[175],"Megválaszolt kérdés",[177],"Tipikus eszköz",[179,186,193,200],[180,182,184],[181],"Biztonságos megjelenítés",[183],"Futtathat-e kódot vagy szivárogtathat-e adatot ez a szöveg megjelenítéskor?",[185],"Markdown renderer beállítás, sanitizer, CSP",[187,189,191],[188],"Műveleti ellenőrzés",[190],"Engedélyezett és helyes formájú-e ez az eszközhívás vagy JSON?",[192],"JSON Schema, allowlist, jogosultság-ellenőrzés",[194,196,198],[195],"Tartalombiztonság",[197],"Ártalmas, gyűlöletkeltő vagy szabályzatba ütköző-e?",[199],"omni-moderation-latest, Llama Guard 4, Azure AI Content Safety",[201,203,205],[202],"Helyesség és szivárgás",[204],"Megalapozott-e, és kiad-e olyan adatot, amit nem kellene?",[206],"Megalapozottság-ellenőrzés, PII- és titokszkenner",{"type":135,"content":208},[209],"A táblázat sorrendje egyben az a sorrend, amelyben a munkát priorizálnám. A megjelenítési és műveleti hibák egyetlen rossz válaszból incidenst csinálnak; egy B2B támogatási widgetben megjelenő sértő szöveg kínos, de ritkán töröl adatot.",{"type":148,"level":149,"id":107,"text":108},{"type":135,"content":212},[213],"A chatfelületek azért jelenítenek meg Markdownt, mert jól néz ki. A Markdown viszont arra is mód, hogy a böngésző URL-eket kérjen le. A klasszikus szivárogtatási minta: egy becsempészett utasítás ráveszi a modellt, hogy privát adatot írjon egy kép URL-jének query stringjébe, a böngésző pedig abban a pillanatban elküldi a támadónak, amikor a kép megjelenik, kattintás nélkül. Simon Willison számos terméknél dokumentálta; a 2025 májusában jelentett GitLab Duo esetben egy nyilvános projektben elrejtett utasítás arra vette rá az asszisztenst, hogy lekérjen egy privát merge requestet, és egy base64 összefoglalót egy képtagen keresztül kiszivárogtasson. A GitLab úgy javította, hogy linkek és képek csak megbízható domainekre mutathatnak.",{"type":135,"content":215},[216,217,220,221,224,225,228],"Vue vagy Nuxt frontendben ugyanazok a szabályok érvényesek, amelyeket a Vue biztonsági útmutatója a felhasználói tartalomra már megad: soha ne használj megbízhatatlan tartalmat templateként, kerüld a ",{"tag":154,"children":218},[219],"v-html","-t tisztítatlan HTML-lel, és az URL-eket a szerveren tisztítsd. Modellkimenetnél négy dolgot csinálok: kikapcsolom a nyers HTML-t a Markdown rendererben, átírom vagy eldobom azokat a képeket és linkeket, amelyek hostja nincs az allowlisten, a megmaradt külső linkekre ",{"tag":154,"children":222},[223],"rel=\"noopener nofollow\""," kerül, és olyan Content Security Policyt küldök, amelynek ",{"tag":154,"children":226},[227],"img-src"," része csak a saját hostjaimat engedi. A CSP az a háló, amely akkor is tart, ha a rendererben hiba van.",{"type":154,"code":230},"\u002F\u002F server\u002Futils\u002Frender-answer.ts — Markdown from the model, rendered on the server\nimport MarkdownIt from 'markdown-it'\n\nconst ALLOWED_HOSTS = new Set(['balazscsorba.com', 'cdn.example-shop.at'])\nconst md = new MarkdownIt({ html: false, linkify: false })\n\nfunction allowed(url: string) {\n  try {\n    const u = new URL(url, 'https:\u002F\u002Fbalazscsorba.com')\n    return (u.protocol === 'https:' && ALLOWED_HOSTS.has(u.hostname))\n  } catch { return false }\n}\n\n\u002F\u002F images to unknown hosts become plain alt text, so nothing is fetched\nmd.renderer.rules.image = (tokens, i) => {\n  const src = tokens[i].attrGet('src') ?? ''\n  return allowed(src) ? `\u003Cimg src=\"${md.utils.escapeHtml(src)}\" alt=\"${md.utils.escapeHtml(tokens[i].content)}\">`\n                      : md.utils.escapeHtml(tokens[i].content)\n}\nconst defaultLink = md.renderer.rules.link_open ?? ((t, i, o, e, s) => s.renderToken(t, i, o))\nmd.renderer.rules.link_open = (tokens, i, opts, env, self) => {\n  if (!allowed(tokens[i].attrGet('href') ?? '')) tokens[i].attrSet('href', '#blocked-link')\n  tokens[i].attrSet('rel', 'noopener nofollow')\n  return defaultLink(tokens, i, opts, env, self)\n}\n\nexport const renderAnswer = (text: string) => md.render(text)\n",{"type":135,"content":232},[233,234,236],"A szerveren renderelj, és csak akkor küldj HTML-t a kliensnek, ha ezek a szabályok lefutottak. Ha a böngészőben renderelsz, ott is ugyanezeket a szabályokat alkalmazd, és a CSP-t akkor is tartsd meg, mert egyetlen komponens, amely nyers kimenetnél ",{"tag":154,"children":235},[219],"-re vált, a többit semmissé teszi.",{"type":148,"level":149,"id":110,"text":111},{"type":135,"content":239},[240,241,245],"Amikor a kimenet műveletet vezérel, eszközhívást, visszatérítést, adatbázis-lekérdezést, az ellenőrzések determinisztikusak és olcsók, így nincs mentség a kihagyásukra. A szigorú JSON Schema mód a formát garantálja, nem a jelentést, ahogy a ",{"tag":139,"to":242,"children":243},"\u002Fblog\u002Fstructured-outputs-json-schema-llm",[244],"strukturált kimenet JSON Schemával"," cikkben kifejtettem. Parse-olás után vesd össze az értékeket az üzleti szabályokkal: láthatja-e az aktuális felhasználó ezt a rendelésszámot, a visszatérítés a saját hatáskörben adható határ alatt van-e, létezik-e ez a cikkszám a katalógusban.",{"type":247,"items":248},"list",[249,254,256,258,260],[250,251,253],"Soha ne add át a kimenetet ",{"tag":154,"children":252},[160],"-nak, shellnek vagy kifejezéseket futtató template engine-nek.",[255],"Minden modellből származó értékhez paraméterezett lekérdezést használj; az OWASP ezt kifejezetten említi.",[257],"Fájlneveket és azonosítókat keresőtáblából oldj fel, ne szövegből rakj össze útvonalat.",[259],"A kimenetet a célkörnyezethez illően escape-eld: HTML, e-mail, CSV, shell argumentum.",[261,262,266],"Visszafordíthatatlan műveletek elé tegyél embert, ahogy a ",{"tag":139,"to":263,"children":264},"\u002Fblog\u002Fhuman-in-the-loop-ai-agents",[265],"human-in-the-loop jóváhagyási pontok"," cikkben.",{"type":135,"content":268},[269,270,274],"Generált SQL esetén különösen a csak olvasási jogú szerepkör és a lekérdezés-validátor számít többet bármely osztályozónál; a részletek a ",{"tag":139,"to":271,"children":272},"\u002Fblog\u002Ftext-to-sql-llm-guardrails",[273],"text-to-SQL guardrailek"," cikkben vannak.",{"type":148,"level":149,"id":113,"text":114},{"type":135,"content":277},[278],"Tartalombiztonsághoz ritkán írsz saját modellt. Az általam látott projektek többségét három család lefedi: az OpenAI moderációs végpontja, a Meta Llama Guard 4 mint saját üzemeltetésű vagy bérelt nyílt súlyú modell, valamint az Azure AI Content Safety több specializált detektorral.",{"type":170,"head":280,"rows":287},[281,283,285],[282],"Lehetőség",[284],"Mit osztályoz",[286],"Megjegyzések a dokumentációból",[288,295,302],[289,291,293],[290],"OpenAI omni-moderation-latest",[292],"Szöveg és kép; kategóriák pl. zaklatás, gyűlölet, illegális, önsértés, szexuális, erőszak",[294],"Ingyenes. Sok kategória csak szövegre működik. Futhat inline egy generálási kérésben.",[296,298,300],[297],"Meta Llama Guard 4 (12B)",[299],"Promptok és válaszok az S1–S14 veszélykategóriák szerint",[301],"Nyílt súlyok, szöveg és kép. Kimenete safe vagy unsafe, plusz a megsértett kategóriák. A kategóriák a promptban testre szabhatók.",[303,305,307],[304],"Azure AI Content Safety",[306],"Ártalomkategóriák, Prompt Shields, megalapozottság, védett tartalom",[308],"A védett tartalom felismerése csak angolul működik; a kódindex csak 2023 áprilisáig naprakész.",{"type":135,"content":310},[311,312,315,316,319],"A Llama Guard 4 az MLCommons veszélytaxonómiáját használja egy kiegészítéssel: S1 erőszakos bűncselekmények, S2 erőszakmentes bűncselekmények, S3 szexuális bűncselekmények, S4 gyermekek kizsákmányolása, S5 rágalmazás, S6 szakmai tanácsadás, S7 magánszféra, S8 szellemi tulajdon, S9 tömegpusztító fegyverek, S10 gyűlölet, S11 önsértés, S12 szexuális tartalom, S13 választások és S14 kódértelmezővel való visszaélés. Egy válasz ellenőrzéséhez a Meta szerint a promptnak a felhasználói üzenetet és az ágens válaszát is tartalmaznia kell, mert a kérdés adja a válasz megítélésének kontextusát. Az első kimeneti sor ",{"tag":154,"children":313},[314],"safe"," vagy ",{"tag":154,"children":317},[318],"unsafe",", a második felsorolja a megsértett kategóriákat.",{"type":135,"content":321},[322,323,326,327,329],"Az OpenAI bevezette az inline moderációt: ha egy Responses vagy Chat Completions kérésben legfelső szintű ",{"tag":154,"children":324},[325],"moderation"," objektumot adsz meg ",{"tag":154,"children":328},[19]," modellel, a bemenetre és a kimenetre is kapsz pontszámokat, második hívás nélkül. A dokumentáció két dologban egyértelmű, és ezeket minden csapatnak elmondanám. Egy biztonságtudatos elutasítás is kaphat jelölést, mert ártalmas tartalomról beszél, ezért a pontszámok a saját szabályzatod jelzései, nem automatikus tiltás. Eszközhívásoknál pedig a moderáció a beszélgetésben szereplő argumentumokat és kimeneteket fedi le, az eszközneveket, leírásokat és sémákat nem.",{"type":331,"variant":332,"title":333,"body":334},"callout","warn","A moderációs API nem biztonsági határ",[335],[336],"Egyik osztályozó sem vizsgálja, hogy egy kép URL-je szivárogtat-e adatot, hogy a JSON-ban szereplő visszatérítés a határokon belül van-e, vagy hogy a válasz igaz-e. Egy szivárogtató payloadra adott tiszta moderációs eredmény a várt kimenet, nem az osztályozó hibája.",{"type":148,"level":149,"id":116,"text":117},{"type":135,"content":339},[340,341,344,345,348,349,352],"A felhasználók azt várják, hogy a tokenek generálás közben jelenjenek meg, minden kimeneti ellenőrzés viszont a teljes szöveget szeretné. A kettő egyszerre nem megy, és az eszközök ezt ki is mondják. Az OpenAI szerint az inline moderációs pontszámok csak a teljes kimenet elkészülte után érkeznek, a deltákkal nem. Az NVIDIA NeMo Guardrails bekapcsolt streamingnél chunkokon futtatja az output raileket: a ",{"tag":154,"children":342},[343],"chunk_size"," alapértéke 200 token, a ",{"tag":154,"children":346},[347],"context_size"," 50 tokent visz át a következő chunkba, hogy a határon átnyúló mondatot is egészként ítélje meg, a ",{"tag":154,"children":350},[351],"stream_first"," pedig a sorrendet dönti el.",{"type":354,"attrs":355,"inner":359,"caption":360},"diagram",{"viewBox":356,"role":357,"aria-labelledby":358},"0 0 720 170","img","ogr-stream-t ogr-stream-d","\u003Ctitle id=\"ogr-stream-t\">Két mód a kimeneti ellenőrzéssel történő streamingre\u003C\u002Ftitle>\u003Cdesc id=\"ogr-stream-d\">A tokenek chunkokba pufferelődnek; a chunk vagy elküldésre kerül, majd ellenőrzésre, vagy ellenőrzés után kerül elküldésre.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"ogr-stream-ah\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"20\" y=\"47\" width=\"154\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"97\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Modell\u003C\u002Ftext>\u003Ctext x=\"97\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">tokenfolyam\u003C\u002Ftext>\u003Cpath d=\"M174 85H194\" class=\"d-line\" marker-end=\"url(#ogr-stream-ah)\" \u002F>\u003Crect x=\"196\" y=\"47\" width=\"154\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"272\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Puffer\u003C\u002Ftext>\u003Ctext x=\"272\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">200 tokenes chunk\u003C\u002Ftext>\u003Cpath d=\"M349 85H369\" class=\"d-line\" marker-end=\"url(#ogr-stream-ah)\" \u002F>\u003Crect x=\"371\" y=\"47\" width=\"154\" height=\"76\" rx=\"10\" class=\"d-fill-accent\" \u002F>\u003Ctext x=\"448\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Rail-ellenőrzés\u003C\u002Ftext>\u003Ctext x=\"448\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">+50 token kontextus\u003C\u002Ftext>\u003Cpath d=\"M524 85H544\" class=\"d-line\" marker-end=\"url(#ogr-stream-ah)\" \u002F>\u003Crect x=\"546\" y=\"47\" width=\"154\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"623\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Kliens\u003C\u002Ftext>\u003Ctext x=\"623\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">megjelenítés vagy leállítás\u003C\u002Ftext>",[361,364,365,368],{"tag":154,"children":362},[363],"stream_first: True"," esetén a kliens minden chunkot megkap a rail futása előtt; ",{"tag":154,"children":366},[367],"False"," esetén előbb fut a rail, és minden chunkhoz hozzáadja a késleltetését.",{"type":135,"content":370},[371,372,374],"Ha a ",{"tag":154,"children":373},[351]," értéke true, ami az alapértelmezés, a felhasználó már elolvashatott egy chunkot, amelyet aztán letilt a rendszer, és a stream egy JSON-hibával ér véget, amelyet a frontendnek kezelnie kell, lehetőleg úgy, hogy lecseréli a buborékot, ahelyett hogy félbehagyott mondatot hagyna ott. False esetén letiltott tartalom soha nem jelenik meg, de minden chunk vár a railre. Az én szabályom: előbb streamelj az alacsony kockázatú asszisztenseknél, ahol a legrosszabb eset egy ügyetlen mondat; előbb ellenőrizz, ha a kimenet személyes adatot, árat vagy olyan vállalást tartalmazhat, amelyet a cégnek teljesítenie kellene.",{"type":148,"level":149,"id":119,"text":120},{"type":135,"content":377},[378,379,383],"Egy RAG-asszisztensben a legdrágább kimeneti hiba a magabiztos válasz, amelyet a források nem támasztanak alá. Erre az Azure AI Content Safety megalapozottság-felismerést kínál: elküldöd a generált szöveget és a forrásokat, választasz egy domaint, például Medical vagy Generic, és a szolgáltatás megjelöli a megalapozatlan tartalmat. Egy opcionális javító mód a forrásokhoz igazított szöveget ad vissza. Az ilyen ellenőrzéseket inkább mintavételre és riasztásra használom, mint kemény kapuként, mert a megalapozottságot megítélő modell maga is hibázik, és a valódi javítás korábban, a visszakeresésnél és a hivatkozásoknál van, erről a ",{"tag":139,"to":380,"children":381},"\u002Fblog\u002Fllm-hallucination-grounding-citations",[382],"megalapozottság és hivatkozások"," cikkben írtam.",{"type":135,"content":385},[386,387,391],"A szivárgást könnyebb determinisztikusan ellenőrizni. Keresd a kimenetben az ismert mintákat: IBAN-okat, más személyek (nem az aktuális felhasználó) e-mail-címeit és telefonszámait, API-kulcsokat, belső hostneveket és a saját system promptod töredékeit. Ugyanazok a detektorok, amelyeket a bemeneti oldalon ",{"tag":139,"to":388,"children":389},"\u002Fblog\u002Fpii-redaction-llm-pipelines",[390],"PII-kitakarásra"," használsz, a kimeneti oldalon is működnek; a különbség az, hogy kimenetnél általában kitakarsz és naplózol, ahelyett hogy az egész választ eldobnád.",{"type":148,"level":149,"id":122,"text":123},{"type":135,"content":394},[395],"A guardrail döntés, nem pontszám. Minden kategóriánál írd le, mi történik, ha bejelez, és ki látja. Ezzel a táblázattal kezdek, aztán valós forgalom alapján hangolom.",{"type":170,"head":397,"rows":404},[398,400,402],[399],"Találat",[401],"Teendő",[403],"A felhasználó ezt látja",[405,412,419,426,433],[406,408,410],[407],"Nem biztonságos link- vagy képhost",[409],"Szöveggé alakítás, naplózás",[411],"Válasz link nélkül",[413,415,417],[414],"Egyértelmű tartalombiztonsági sértés",[416],"Blokkolás, fix szövegre cserélés, pontszámok naplózása",[418],"Semleges elutasítás és kapcsolatfelvételi lehetőség",[420,422,424],[421],"Más személy PII-adata vagy titka",[423],"Kitakarás, riasztás a biztonsági csapatnak",[425],"Válasz maszkolt értékkel",[427,429,431],[428],"Érvénytelen eszközargumentumok",[430],"Elutasítás, egyszeri hibaüzenet a modellnek",[432],"Semmit, hacsak az újrapróbálás nem bukik el",[434,436,438],[435],"Megalapozatlan állítás RAG-válaszban",[437],"Megjelölés átnézésre, mintavétel",[439],"Válasz a forrásokkal, a megszokott módon",{"type":135,"content":441},[442,443,446],"Két szokás tartja ezt tisztességesen. Minden döntésnél naplózd az osztályozó verzióját, a pontszámokat és a teendőt, mert a küszöbök elcsúsznak, amikor a szolgáltató egy ",{"tag":154,"children":444},[445],"-latest"," alias mögött frissíti a modellt. És blokkoláskor mutass a felhasználónak valami hasznosat: egy fix üzenet és egy út egy emberhez jobb, mint egy néma üres buborék, amelyet az emberek hibának néznek és újrapróbálnak.",{"type":148,"level":149,"id":125,"text":126},{"type":135,"content":449},[450],"Az olcsó determinisztikus ellenőrzések futnak először, az osztályozók utánuk, a megjelenítés pedig utoljára, hogy a drága és tévedhető lépések a lehető legkevesebbet lássák. Nuxtban vagy bármely Node backendben a streaming nélküli változat egy rövid függvény.",{"type":354,"attrs":452,"inner":455,"caption":456},{"viewBox":453,"role":357,"aria-labelledby":454},"0 0 720 180","ogr-pipe-t ogr-pipe-d","\u003Ctitle id=\"ogr-pipe-t\">Kimeneti guardrail pipeline\u003C\u002Ftitle>\u003Cdesc id=\"ogr-pipe-d\">A modell kimenete szivárgásvizsgálaton, sémaellenőrzésen, moderáción és biztonságos megjelenítésen megy át, mielőtt a felhasználóhoz ér.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"ogr-pipe-ah\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"20\" y=\"52\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"79\" y=\"86\" text-anchor=\"middle\" class=\"d-text\">Kimenet\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"108\" text-anchor=\"middle\" class=\"d-small\">szöveg vagy JSON\u003C\u002Ftext>\u003Cpath d=\"M138 90H158\" class=\"d-line\" marker-end=\"url(#ogr-pipe-ah)\" \u002F>\u003Crect x=\"160\" y=\"52\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"220\" y=\"86\" text-anchor=\"middle\" class=\"d-text\">Szivárgás\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"108\" text-anchor=\"middle\" class=\"d-small\">PII, titkok\u003C\u002Ftext>\u003Cpath d=\"M279 90H299\" class=\"d-line\" marker-end=\"url(#ogr-pipe-ah)\" \u002F>\u003Crect x=\"301\" y=\"52\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"360\" y=\"86\" text-anchor=\"middle\" class=\"d-text\">Séma\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"108\" text-anchor=\"middle\" class=\"d-small\">szabályok, allowlist\u003C\u002Ftext>\u003Cpath d=\"M419 90H439\" class=\"d-line\" marker-end=\"url(#ogr-pipe-ah)\" \u002F>\u003Crect x=\"441\" y=\"52\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-fill-accent\" \u002F>\u003Ctext x=\"500\" y=\"86\" text-anchor=\"middle\" class=\"d-text\">Moderáció\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"108\" text-anchor=\"middle\" class=\"d-small\">pontszám, szabály\u003C\u002Ftext>\u003Cpath d=\"M560 90H580\" class=\"d-line\" marker-end=\"url(#ogr-pipe-ah)\" \u002F>\u003Crect x=\"582\" y=\"52\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"641\" y=\"86\" text-anchor=\"middle\" class=\"d-text\">Megjelenítés\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"108\" text-anchor=\"middle\" class=\"d-small\">hostok, CSP\u003C\u002Ftext>",[457],"Költség szerinti sorrend: először a determinisztikus ellenőrzések, aztán az osztályozó, végül a megjelenítési szabályok.",{"type":154,"code":459},"\u002F\u002F server\u002Futils\u002Fguard-output.ts\nimport { renderAnswer } from '.\u002Frender-answer'\nimport { redactLeaks } from '.\u002Fredact'          \u002F\u002F your PII \u002F secret patterns\n\nconst BLOCKED = 'I cannot help with that here. Please contact our support team.'\n\nexport async function guardOutput(text: string) {\n  const { text: clean, findings } = redactLeaks(text)\n\n  const res = await fetch('https:\u002F\u002Fapi.openai.com\u002Fv1\u002Fmoderations', {\n    method: 'POST',\n    headers: { Authorization: `Bearer ${process.env.OPENAI_API_KEY}`, 'Content-Type': 'application\u002Fjson' },\n    body: JSON.stringify({ model: 'omni-moderation-latest', input: clean }),\n  })\n  if (!res.ok) throw new Error(`moderation failed: ${res.status}`)   \u002F\u002F fail closed\n  const result = (await res.json()).results[0]\n\n  const decision = result.flagged ? 'block' : findings.length ? 'redact' : 'allow'\n  console.info(JSON.stringify({ event: 'output_guard', decision, findings, scores: result.category_scores }))\n\n  return { html: renderAnswer(decision === 'block' ? BLOCKED : clean), decision }\n}\n",{"type":135,"content":461},[462,463,466,467,471],"A vázlatban két döntés tudatos. Ha a moderációs hívás hibára fut, zártan bukik el, ami egy nyilvános asszisztensnél helyes, egy belső eszköznél viszont, ahol a rendelkezésre állás fontosabb, helytelen; ezt döntsd el kifejezetten. És első döntésként a ",{"tag":154,"children":464},[465],"flagged"," értéket használja, ahogy az OpenAI javasolja, de minden pontszámot naplóz, hogy később kategóriánkénti küszöbökre válthass. Ha inkább keretrendszert használnál: a Guardrails AI ugyanezt az ötletet modellhíváshoz csatolható validátorokba csomagolja, erről a ",{"tag":139,"to":468,"children":469},"\u002Ftools\u002Fguardrails-ai",[470],"Guardrails AI áttekintésben"," írtam.",{"type":148,"level":149,"id":128,"text":129},{"type":135,"content":474},[475],"A guardrailek két irányban hibáznak, és mindkettő pénzbe kerül. A kihagyott sértés a nyilvánvaló. A téves riasztás a csendes: egy támogatási asszisztens, amely elutasítja a „folyamat kilövésére” vagy a „veszélyes áru szállítására” vonatkozó kérdéseket, úgy veszít felhasználókat, hogy senki sem veszi észre. Építs egy kis címkézett készletet mindkét fajtával, beleértve az osztályozókat megzavaró szakszókincset, és futtasd CI-ban, valahányszor küszöböt, promptot vagy osztályozóverziót változtatsz.",{"type":247,"items":477},[478,480,482,484],[479],"Vegyél fel szivárogtató payloadokat: query stringes kép-URL-eket, hasonló kinézetű domainekre mutató linkeket, HTML tageket a Markdownban.",[481],"Vegyél fel tartományon kívüli értékekkel és más ügyfélhez tartozó azonosítókkal végzett eszközhívásokat.",[483],"A tiltási arányt és a téves riasztási arányt kategóriánként éles mintákon kövesd, ne csak a tesztkészleten.",[485,486,490],"Red-teameld az egész láncot egy olyan eszközzel, mint a ",{"tag":139,"to":487,"children":488},"\u002Ftools\u002Fpromptfoo",[489],"Promptfoo",", mert egy payload, amely egy rétegen átjut, csak akkor érdekes, ha mindegyiken átjut.",{"type":135,"content":492},[493],"Az output guardrailek nem látványos mérnöki munka: renderer-beállítás, sémák, egy osztályozóhívás és egy döntési táblázat. Pontosan ezért működnek. A modell továbbra is meg fog lepni; az utána következő rendszerek ne tegyék.",{"type":148,"level":149,"id":131,"text":132},{"type":247,"ordered":496,"items":497},true,[498,502,505,508,511,514,517,520,523,526],[499],{"tag":500,"href":38,"children":501},"a",[37],[503],{"tag":500,"href":41,"children":504},[40],[506],{"tag":500,"href":44,"children":507},[43],[509],{"tag":500,"href":47,"children":510},[46],[512],{"tag":500,"href":50,"children":513},[49],[515],{"tag":500,"href":53,"children":516},[52],[518],{"tag":500,"href":56,"children":519},[55],[521],{"tag":500,"href":59,"children":522},[58],[524],{"tag":500,"href":62,"children":525},[61],[527],{"tag":500,"href":65,"children":528},[64],[530,586,630,732],{"slug":531,"published":532,"minutes":533,"category":7,"tags":534,"keywords":540,"about":551,"sources":561,"cover":580,"og":581,"expertise":68,"locales":582,"lang":72,"title":583,"description":584,"coverAlt":585},"slopsquatting-ai-package-hallucinations","2026-10-16",6,[535,536,537,538,539],"Supply chain security","Coding agents","npm","PyPI","Package hallucination",[541,542,543,544,545,546,547,548,549,550],"slopsquatting","package hallucination","ai hallucinated packages","llm package confusion attack","coding agent supply chain security","npm min-release-age","pnpm minimumReleaseAge","uv exclude-newer","npm ignore-scripts","huggingface-cli hallucinated package",[552,555,558],{"name":553,"url":554},"Typosquatting","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTyposquatting",{"name":556,"url":557},"Supply chain attack","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSupply_chain_attack",{"name":559,"url":560},"Hallucination (artificial intelligence)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHallucination_(artificial_intelligence)",[562,565,568,571,574,577],{"title":563,"url":564},"Spracklen et al.: We Have a Package for You! A Comprehensive Analysis of Package Hallucinations by Code Generating LLMs (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2406.10279",{"title":566,"url":567},"Lasso Security, Bar Lanyado: Diving Deeper into AI Package Hallucinations (Mar 2024)","https:\u002F\u002Fwww.lasso.security\u002Fblog\u002Fai-package-hallucinations",{"title":569,"url":570},"npm Docs: config (min-release-age, before, ignore-scripts, allow-scripts)","https:\u002F\u002Fdocs.npmjs.com\u002Fcli\u002Fv11\u002Fusing-npm\u002Fconfig",{"title":572,"url":573},"pnpm: Dependency resolution settings (minimumReleaseAge)","https:\u002F\u002Fpnpm.io\u002Fsettings\u002Fdependency-resolution",{"title":575,"url":576},"uv: Settings reference (exclude-newer, require-hashes)","https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Freference\u002Fsettings\u002F",{"title":578,"url":579},"pip documentation: Secure installs and hash-checking mode","https:\u002F\u002Fpip.pypa.io\u002Fen\u002Fstable\u002Ftopics\u002Fsecure-installs\u002F","\u002Fimages\u002Fblog\u002Fslopsquatting-ai-package-hallucinations\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fslopsquatting-ai-package-hallucinations\u002Fog.jpg",[70,71,72],"Slopsquatting: amikor a kódoló ágensek nem létező csomagokat telepítenek","Hogyan hallucinálnak az LLM-ek csomagneveket, hogyan regisztrálják ezeket a támadók, és mely registry-, lockfile- és ágenskontrollok állítják meg a telepítést.","Három doboz egy sínén, a középső üreges és elcsúszott, alatta egyező négyzetek a tálcán.",{"slug":587,"published":532,"minutes":533,"category":7,"tags":588,"keywords":593,"about":604,"sources":611,"cover":624,"og":625,"expertise":68,"locales":626,"lang":72,"title":627,"description":628,"coverAlt":629},"rag-poisoning-knowledge-base-attacks",[589,590,591,12,592],"RAG security","Data poisoning","Prompt injection","Vector database",[594,595,596,597,598,599,600,601,602,603],"rag poisoning","knowledge base poisoning","poisonedrag","rag security","indirect prompt injection rag","owasp llm08 vector and embedding weaknesses","vector database security","rag data poisoning defense","hidden text prompt injection","secure rag ingestion",[605,608,610],{"name":606,"url":607},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":591,"url":609},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_injection",{"name":12,"url":34},[612,615,618,621],{"title":613,"url":614},"Zou et al.: PoisonedRAG: Knowledge Corruption Attacks to Retrieval-Augmented Generation of Large Language Models (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2402.07867",{"title":616,"url":617},"Greshake et al.: Not what you've signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection (2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2302.12173",{"title":619,"url":620},"OWASP Gen AI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":622,"url":623},"OWASP Gen AI Security Project: LLM04:2025 Data and Model Poisoning","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm042025-data-and-model-poisoning\u002F","\u002Fimages\u002Fblog\u002Frag-poisoning-knowledge-base-attacks\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-poisoning-knowledge-base-attacks\u002Fog.jpg",[70,71,72],"RAG-mérgezés: hogyan téríthet el néhány dokumentum egy asszisztenst, és hogyan védd a tudásbázist","Hogyan helyeznek el a támadók RAG által visszakeresett dokumentumokat, mit mutat a PoisonedRAG és az OWASP, és milyen kontrollok korlátozzák ezt.","Lapok futnak szalagon egy tárolóba, az egyiken kis kocka, a kijáratnál kapu.",{"slug":631,"published":632,"minutes":633,"category":7,"tags":634,"keywords":640,"about":649,"sources":659,"cover":726,"og":727,"expertise":68,"locales":728,"lang":72,"title":729,"description":730,"coverAlt":731},"coding-agent-secrets-hygiene","2026-10-08",11,[635,636,637,638,639],"AI agents","Secrets management","Claude Code","Pre-commit scanning","CI security",[641,642,643,644,645,646,647,648],"coding agent secrets","keep secrets away from AI agents","Claude Code deny read .env","gitleaks pre-commit hook","GitHub push protection secrets","OIDC GitHub Actions short-lived credentials","rotate a leaked API key","MCP server token scope",[650,653,656],{"name":651,"url":652},"Principle of least privilege","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrinciple_of_least_privilege",{"name":654,"url":655},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",{"name":657,"url":658},"Git","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGit",[660,663,666,669,672,675,678,681,684,687,690,693,696,699,702,705,708,711,714,717,720,723],{"title":661,"url":662},"Claude Code: permissions","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fpermissions",{"title":664,"url":665},"Claude Code: sandboxed Bash","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fsandboxing",{"title":667,"url":668},"Claude Code: hooks","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fhooks",{"title":670,"url":671},"Claude Code: data usage","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fdata-usage",{"title":673,"url":674},"Claude Code: settings","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fsettings",{"title":676,"url":677},"Claude Code: MCP servers","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fmcp",{"title":679,"url":680},"Codex: configuration reference","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fconfig-reference",{"title":682,"url":683},"Codex: agent approvals and security","https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Fagent-approvals-security",{"title":685,"url":686},"Codex: advanced configuration","https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Fconfig-file\u002Fconfig-advanced",{"title":688,"url":689},"GitHub: about push protection","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcode-security\u002Fsecret-scanning\u002Fintroduction\u002Fabout-push-protection",{"title":691,"url":692},"GitHub: security hardening with OIDC","https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fsecurity-for-github-actions\u002Fsecurity-hardening-your-deployments\u002Fabout-security-hardening-with-openid-connect",{"title":694,"url":695},"GitHub: OpenID Connect reference","https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Freference\u002Fsecurity\u002Foidc",{"title":697,"url":698},"GitHub: using secrets in Actions","https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fsecurity-guides\u002Fusing-secrets-in-github-actions",{"title":700,"url":701},"GitHub: secure use reference","https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fsecurity-for-github-actions\u002Fsecurity-guides\u002Fsecurity-hardening-for-github-actions",{"title":703,"url":704},"GitHub: removing sensitive data","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fauthentication\u002Fkeeping-your-account-and-data-secure\u002Fremoving-sensitive-data-from-a-repository",{"title":706,"url":707},"gitleaks: README and latest release","https:\u002F\u002Fgithub.com\u002Fgitleaks\u002Fgitleaks",{"title":709,"url":710},"TruffleHog: README","https:\u002F\u002Fgithub.com\u002Ftrufflesecurity\u002Ftrufflehog",{"title":712,"url":713},"detect-secrets: README and latest release","https:\u002F\u002Fgithub.com\u002FYelp\u002Fdetect-secrets",{"title":715,"url":716},"Model Context Protocol: security best practices","https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-06-18\u002Fbasic\u002Fsecurity_best_practices",{"title":718,"url":719},"OWASP: Secrets Management Cheat Sheet","https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FSecrets_Management_Cheat_Sheet.html",{"title":721,"url":722},"OWASP: LLM02 sensitive information disclosure","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm022025-sensitive-information-disclosure\u002F",{"title":724,"url":725},"Git: git-add documentation","https:\u002F\u002Fgit-scm.com\u002Fdocs\u002Fgit-add","\u002Fimages\u002Fblog\u002Fcoding-agent-secrets-hygiene\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcoding-agent-secrets-hygiene\u002Fog.jpg",[70,71,72],"Kódoló ügynökök és titkok: kulcsok a kontextuson, logokon és commitokon kívül","Hogyan szivárognak ki a titkok kódoló ügynökökön át, és mely kontrollok állítják meg: olvasási tiltás, sandbox, pre-commit, push-védelem, OIDC és kulcscsere.","Apró négyzetek egy sínén egy zárral jelölt falnál állnak meg, mögötte nyitott láda.",{"slug":733,"published":734,"minutes":633,"category":7,"tags":735,"keywords":741,"about":750,"sources":763,"cover":805,"og":806,"expertise":68,"locales":807,"lang":72,"title":808,"description":809,"coverAlt":810},"works-council-ai-tools-austria-germany","2026-10-02",[736,737,738,739,740],"Works council","AI coding tools","Employee monitoring","GDPR","Co-determination",[742,743,744,745,746,747,748,749],"works council AI tools","AI coding tools works council","Betriebsrat KI Mitbestimmung","§ 87 BetrVG Überwachung","§ 96 ArbVG Kontrollmaßnahmen","AI usage logs employee monitoring","works agreement for AI tools","GDPR Article 88 employee data",[751,754,757,760],{"name":752,"url":753},"General Data Protection Regulation","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2016\u002F679\u002Foj\u002Feng",{"name":755,"url":756},"EU Artificial Intelligence Act (Regulation (EU) 2024\u002F1689)","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2024\u002F1689\u002Foj\u002Feng",{"name":758,"url":759},"Arbeitsverfassungsgesetz (Austrian Labour Constitution Act)","https:\u002F\u002Fwww.ris.bka.gv.at\u002FGeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10008329",{"name":761,"url":762},"Betriebsverfassungsgesetz (German Works Constitution Act), § 87","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbetrvg\u002F__87.html",[764,766,768,771,774,776,779,781,784,787,790,793,796,799,802],{"title":765,"url":759},"Arbeitsverfassungsgesetz (ArbVG), §§ 96 and 96a, consolidated text of 10 October 2026, RIS",{"title":767,"url":762},"Betriebsverfassungsgesetz (BetrVG), § 87, gesetze-im-internet.de",{"title":769,"url":770},"Betriebsverfassungsgesetz (BetrVG), § 90, gesetze-im-internet.de","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbetrvg\u002F__90.html",{"title":772,"url":773},"Bundesdatenschutzgesetz (BDSG), § 26, gesetze-im-internet.de","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbdsg_2018\u002F__26.html",{"title":775,"url":753},"Regulation (EU) 2016\u002F679 (GDPR), EUR-Lex",{"title":777,"url":778},"GDPR Article 5(1)(e), storage limitation, gdpr-info.eu","https:\u002F\u002Fgdpr-info.eu\u002Fart-5-gdpr\u002F",{"title":780,"url":756},"Regulation (EU) 2024\u002F1689 (AI Act), EUR-Lex",{"title":782,"url":783},"Regulation (EU) 2026\u002F1744, EUR-Lex","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2026\u002F1744\u002Foj",{"title":785,"url":786},"AI Act Article 26, AI Act Explorer","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F26\u002F",{"title":788,"url":789},"AI Act Annex III, AI Act Explorer","https:\u002F\u002Fartificialintelligenceact.eu\u002Fannex\u002F3\u002F",{"title":791,"url":792},"BAG, 1 ABR 16\u002F23 (July 2024), headset system, gesetze.co","https:\u002F\u002Fgesetze.co\u002Furteile\u002F1_ABR_16-23",{"title":794,"url":795},"ArbG Hamburg, 24 BVGa 1\u002F24: law-firm summary by CMS","https:\u002F\u002Fcms.law\u002Fde\u002Fdeu\u002Flegal-updates\u002Fkein-mitbestimmungsrecht-des-betriebsrats-bei-chatgpt-co",{"title":797,"url":798},"ArbG Hamburg, 24 BVGa 1\u002F24: law-firm summary by Gleiss Lutz","https:\u002F\u002Fwww.gleisslutz.com\u002Fde\u002Fknow-how\u002Farbeitsgericht-hamburg-zu-chatgpt-kein-mitbestimmungsrecht-des-betriebsrats",{"title":800,"url":801},"Claude Code documentation: monitoring usage","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fmonitoring-usage",{"title":803,"url":804},"GitHub Docs: Copilot metrics data reference","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Freference\u002Fmetrics-data","\u002Fimages\u002Fblog\u002Fworks-council-ai-tools-austria-germany\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fworks-council-ai-tools-austria-germany\u002Fog.jpg",[70,71,72],"AI-kódolóeszközök és üzemi tanács: mikor számít megfigyelésnek a napló","A használati naplók miatt egy AI-kódolóeszköz is megfigyelő rendszerré válhat. Mit írnak elő az osztrák és a német szabályok, és mire érdemes előre megállapodni.","Két magas téglalap egymás mellett egy széles lap alatt, öt kis négyzet hullik egy dobozba.",1792222774331]