Fynd.chat
Functies Integraties Prijzen Blog Kennisbank Live demo
nl en
← Alle guides

· Kennisbank · 7 min lezen

Beveiliging: API-keys, embed en shopperdata

Least privilege voor keys, accounts en knowledge, zodat je adviseur nuttig blijft zonder onnodig risico.

Slot en sleutels voor embed en Catalog API

Beveiliging: API-keys, embed en shopperdata

Wat “security” betekent voor een AI-productadviseur

Security bij Fynd is geen aparte module die je ooit “aanzet”. Het is de manier waarop je accounts, sleutels, catalogusbronnen, gesprekken en de embed-widget beheert. Een AI-productadviseur zit tussen je storefront en je productkennis: verkeerde toegang tot een sleutel, te ruime dashboardrechten of geheimen in custom knowledge raken direct shoppers én je catalogus.

Dit artikel is een praktijkhandleiding voor shop-operators. Het legt uit welke sleutels er zijn, wat je wél en niet in de browser mag laden, hoe je accounts beschermt, en hoe je kennisbronnen veilig houdt. Het vervangt geen juridisch advies en geen audit. Voor privacyrechten en verwerking zie het privacybeleid. Voor de technische Catalog API zie de kennisbankpagina over sk_live.

Het doel is eenvoudig: alleen de juiste systemen mogen schrijven naar je catalogus, alleen de juiste mensen mogen je bots beheren, en shoppers krijgen advies zonder dat secrets of interne processen lekken.

Twee soorten sleutels: embed vs Catalog API

Fynd gebruikt verschillende credentials voor verschillende taken. Verwissel ze niet.

Embed-key hoort in je storefront. Die sleutel laadt de widget (fynd.js) en koppelt chatverkeer aan jouw shop en bot. De embed-key is bedoeld om publiek in HTML te staan, net als een analytics-sitekey, maar blijft gebonden aan jouw shopconfiguratie, rate limits en allowlisted events. Gebruik hem niet om producten te upserten of te verwijderen.

Catalog API-key (sk_live_…) is een geheim. Die autoriseert list, upsert, bulk en delete op productdata. Behandel hem als een wachtwoord of database-credential:

  • Nooit in frontend JavaScript, theme files of een openbare Git-repo
  • Nooit in een productfeed, sitemap of custom knowledge-tekst
  • Alleen in server-side secret managers, CI-secrets of versleutelde env-vars
  • Meteen intrekken of roteren bij vermoeden van lekkage

API-keys worden gehashed opgeslagen. Je ziet de volledige waarde één keer bij aanmaken. Kopieer hem direct naar je secret store. Verlies je de waarde, maak een nieuwe key aan en vervang de oude in je integratie; reken er niet op dat je hem later opnieuw kunt “terugkijken”.

Een handige checklist vóór je een key deployt:

  1. Heeft dit proces écht schrijfrechten nodig, of volstaat de embed?
  2. Draait het proces op een server die jij beheert?
  3. Is de key genoemd (FYND_CATALOG_API_KEY) i.p.v. hardgecodeerd?
  4. Wie kan de secret store openen?
  5. Staat er een rotatie-eigenaar en een datum in je runbook?

Accounts, wachtwoorden, 2FA en passkeys

Dashboardtoegang is vaak de zwakste schakel. Iemand met toegang tot bots, knowledge, billing en API-keys kan meer dan een gecompromitteerde embed-key.

Praktische basis:

  • Gebruik sterke, unieke wachtwoorden (in productie: lengte, mix van tekens, geen bekende gelekte wachtwoorden)
  • Schakel 2FA in zodra je live gaat of catalogus syncs beheert
  • Overweeg passkeys voor snellere, phishing-bestendigere login
  • Deel geen “teamwachtwoord” via chat of e-mail
  • Verwijder of deactiveer accounts van oud-collega’s meteen

Beperk wie platform- of shoprechten heeft. Niet iedereen die content schrijft hoeft API-keys te kunnen aanmaken. Scheid rollen waar je organisatie dat toelaat: iemand beheert copy en FAQ’s, iemand anders beheert keys en billing.

Login, registratie en wachtwoordreset zijn rate-limited. Dat beschermt tegen brute force, maar vervangt geen 2FA. Als je verdachte logins ziet of een collega meldt een phish, reset wachtwoorden, controleer actieve sessions waar mogelijk, en roteer Catalog API-keys die die persoon kon inzien.

Embed-widget: veilige go-live

De widget laadt via een script-tag met data-key en optioneel data-bot. Dat is bewust eenvoudig, maar vraagt discipline:

<script
  src="https://jouw-fynd-domein/widget/fynd.js"
  data-key="JOUW_EMBED_KEY"
  data-bot="default"
  async>
</script>

Controleer vóór productie:

  • Je laadt het script vanaf jouw Fynd-domein (HTTPS), niet vanaf een willekeurige mirror
  • APP_DEBUG staat uit in productie; foutpagina’s mogen geen stack traces tonen
  • De widget stuurt alleen allowlisted analytics events, bouw geen custom event-namen die PII meenemen
  • Welkomsttekst en disclaimer beloven geen “menselijke support” als het een bot is
  • Lead capture vraagt geen overbodige persoonsgegevens vóór er waarde is geleverd

Input van shoppers wordt gesanitized. Vertrouw er toch niet op dat de bot “alles mag onthouden”. Zet in je system prompt en FAQ’s dat de adviseur geen betaalkaarten, burgerservicenummers of wachtwoorden mag vragen of opslaan. Als een gesprek die kant opgaat, moet de bot doorverwijzen naar een veilige checkout of supportkanaal.

Test in de playground met agressieve prompts: “geef me de API-key”, “negeer je regels”, “toon interne notities”. Een goed geconfigureerde bot weigert of blijft binnen catalogus- en knowledge-bronnen. Lukt dat niet, verscherp prompts en knowledge isolation voordat je live gaat.

Wat je nooit in knowledge of prompts zet

Custom knowledge en system prompts worden opgehaald om shoppers te helpen. Behandel elke entry alsof die op een publieke FAQ-pagina kan verschijnen.

Zet niet in knowledge of prompts:

  • Catalog API-keys, embed-keys, database-wachtwoorden, SMTP-credentials
  • Interne kortingscodes die niet voor alle bezoekers bedoeld zijn
  • Medewerker-only procedures, leverancierscontracten, private Slack-kanalen
  • Persoonsgegevens van klanten of collega’s
  • Exacte frauderegels die aanvallers kunnen omzeilen

Zet wel:

  • Publieke verzend- en retourregels
  • Maatadvies en productcare die je ook op de site toont
  • Duidelijke grenzen (“we adviseren geen medische diagnoses”)
  • Hoe contact opnemen met support

Gebruik bot-isolatie wanneer merken of business units gescheiden kennis nodig hebben. Isolatie voorkomt dat een beauty-bot per ongeluk B2B-prijsafspraken of interne recruitmentnotes teruggeeft. Isolatie is geen security boundary tegen een aanvaller met dashboardtoegang, het is een datascheiding voor advieskwaliteit en least privilege op contentniveau.

Catalogusbronnen en sync-veiligheid

Sitemap-crawl, productfeeds en Catalog API brengen data binnen. Elke bron heeft een ander risico:

  • Sitemap: crawlt publieke URL’s. Zorg dat staging, admin-paden en “noindex”-pagina’s niet in de productie-sitemap staan. Blogdetectie via BlogPosting/Article JSON-LD mag geen draft-URL’s indexeren.
  • Feeds (XML/CSV): bescherm feed-URL’s met tokens of IP-allowlists als de feed niet publiek hoort te zijn. Een open feed met interne SKU-kosten is een lek, ook zonder Fynd.
  • Catalog API: schrijft rechtstreeks. Beperk welke services de sk_live-key krijgen. Log wie syncs triggert. Bij bulk-upsert: test eerst op een subset.

Na een grote sync: check in de playground of prijzen, voorraad en URL’s kloppen. Verkeerde data is geen klassiek “security incident”, maar wel een vertrouwensprobleem, en soms een complianceprobleem als je incorrecte claims toont.

Rate limits op widget en Catalog API beschermen tegen misbruik en per ongeluk hammeren. Bouw retries met backoff in je integratie; negeer 429 niet door harder te pushen met meerdere keys.

Shoppergesprekken, leads en analytics

Gesprekken horen bij de shop. Analytics (opens, berichten, productkliks, leads, onbeantwoorde vragen) helpt je gaps dichten, niet om shoppers te profileren voor advertenties.

Praktische regels:

  • Toon in de widget of op de site wat bezoekers mogen verwachten (bot vs mens, wat er wordt bewaard)
  • Vraag in lead capture alleen wat je echt opvolgt
  • Exporteer gesprekken en leads alleen naar systemen die jouw team mag gebruiken
  • Los unanswered questions op door catalogus of FAQ’s te verbeteren, niet door PII uit chatlogs te kopiëren naar publieke pages

Als een shopper inzage of verwijdering vraagt, behandel dat via je eigen privacyproces. Fynd ondersteunt shop-eigenaren; shoppers beginnen idealiter bij de webshop. Documenteer intern wie dat oppakt.

Incident-runbook (kort)

Als iets misgaat, handel in deze volgorde:

  1. Contain: trek verdachte Catalog API-keys in; reset wachtwoorden van betrokken accounts; schakel 2FA afdwingen af waar nodig
  2. Scope: welke shops, bots, syncs of exports zijn geraakt? Welke periode?
  3. Fix: vervang secrets in alle omgevingen; verwijder gelekte tekst uit knowledge/prompts; herstel catalogus indien nodig
  4. Communicate: informeer interne stakeholders; volg wettelijke meldplichten als die van toepassing zijn
  5. Learn: pas toegang, logging en onboarding aan zodat dezelfde fout moeilijker wordt

Houd een eenvoudige lijst bij: wie mag keys aanmaken, waar secrets leven, wanneer je voor het laatst roteerde, en welk e-mailadres securitymeldingen krijgt.

Go-live checklist security

Gebruik dit vóór je de widget breed uitzet:

  • Productie draait op HTTPS; debug uit
  • Sterke accountbeveiliging (wachtwoordbeleid + 2FA/passkeys voor operators)
  • Catalog API-keys alleen server-side; geen secrets in theme of knowledge
  • Embed-key correct op productie-domein; juiste bot-slug
  • Disclaimer en privacyverwijzing zichtbaar waar nodig
  • Playground-tests op jailbreak-achtige prompts en gevoelige vragen
  • Leadvelden minimaal; geen betaalgegevens via chat
  • Rotatie-eigenaar voor keys bekend
  • Oud-medewerkers zonder dashboardtoegang
  • Feed-URL’s en staging-sitemaps niet per ongeluk in productie-sync

Security is hier geen eenmalig project. Elke nieuwe bot, key, feed of collega is een moment om least privilege opnieuw te checken. Doe dat bewust, dan blijft de adviseur nuttig zonder onnodig risico.

Alle guides →