Veiligheid en privacy
TellMyShop slaat in je winkel alleen op wat jij goedkeurt, en elke wijziging kun je ongedaan maken. De chat meldt zich met OAuth 2.1 aan bij je winkel, klantgegevens zijn niet toegankelijk voor AI en versleuteld in de wijzigingsgeschiedenis, en de code kreeg een beveiligingscontrole volgens OWASP ASVS 5.0, de OWASP Top 10 voor LLM-toepassingen, OAuth 2.1 met RFC 9700 en de CWE Top 25. Deze pagina legt in gewone woorden uit hoe het werkt. Het gedeelte aan het eind is voor je IT’er of ontwikkelaar.
In het kort
- Een voorbeeld en jouw akkoord voor elke wijziging. De chat toont voor → na en slaat pas op na jouw “ja”.
- Elke wijziging kun je ongedaan maken: met één zin in de chat of vanuit de wijzigingsgeschiedenis. Vóór de eerste wijziging van elke dag wordt een volledige back-up van de database gemaakt.
- Chat-aanmelding met OAuth 2.1. De chat maakt pas verbinding nadat je in het venster van je winkel op “Toestaan” klikt. Geen wachtwoorden of sleutels om te kopiëren.
- Klantgegevens zijn niet toegankelijk voor AI en versleuteld in de wijzigingsgeschiedenis en in back-ups van bestanden.
- Vaste blokkades: wachtwoorden, API-sleutels, betalingen, belastingen, orderstatussen en accounts liggen op elk niveau buiten bereik van de chat.
- Geen tussenpersoon: de chat maakt rechtstreeks verbinding met de module in je winkel.
- Beveiligingscontrole volgens vier standaarden, met automatische tests en tests in een PrestaShop-winkel (details).
Zonder jouw ja verandert er niets
Elke wijziging heeft drie stappen:
- Voorbeeld. De chat laat zien wat hij wil wijzigen: oude en nieuwe tekst, oude en nieuwe prijs, waarschuwingen.
- Akkoord. De chat wacht. Hij slaat pas op als je “ja” antwoordt.
- Opslaan. De wijziging wordt opgeslagen zoals wanneer een medewerker in de back-office op Opslaan klikt.
Een voorbeeld is 30 minuten geldig en werkt één keer. Wijzigt iemand intussen hetzelfde product in de back-office, dan moet de chat je een nieuw voorbeeld tonen.
Lezen (controles, zoeken, rapporten) verandert niets en vraagt geen akkoord.
De TellMyShop-standaard: hoe de chat over wijzigingen praat
Vóór elke wijziging laat de chat zien wat er verandert, noemt hij het risico en hoe je het ongedaan maakt, en vraagt hij om je akkoord. Bij prijzen en acties krijg je een korte risicokaart.
De module herinnert de chat bij elke verbinding en bij elk voorbeeld aan deze standaard. Hoe hoger het risico, hoe meer de chat zegt:
| Risico | Wanneer | Wat de chat zegt |
|---|---|---|
| Laag | beschrijvingen, meta, alt-teksten, CMS-pagina’s, nieuwe producten | voor en na, één vraag, geen waarschuwingen “voor de zekerheid” |
| Middel | pagina-adressen en doorverwijzingen, categorieën en categorie-indelingen; elke wijziging met waarschuwingen; een wijziging met laag risico op meer dan 20 items | hetzelfde plus 1–2 zinnen: wat klanten of Google zien en hoe je het ongedaan maakt |
| Hoog | Verkoop (prijzen, acties, kortingscodes, voorraad, verzending), Thema, Modules, Onderhoud; een wijziging met middelgroot risico op meer dan 20 items | een korte risicokaart (tot 5 regels): wat er waar verandert, wie het raakt, waar je op let, hoe je het ongedaan maakt en, als het ertoe doet, een goed moment |
Bij meer dan 20 items toont de chat eerst 2–3 voorbeelden en stelt hij voor het op één item te proberen. Alleen een duidelijk “ja” op een bepaald voorbeeld telt als akkoord; “ok” zonder context, een vraag, “misschien” of geen antwoord is geen akkoord. Na het opslaan controleert de chat het resultaat, meldt het kort met cijfers (bijvoorbeeld “28 van 30, 2 overgeslagen omdat…”) en zegt hoe je het ongedaan maakt.
Bij wijzigingen met laag risico voegt de chat bewust geen waarschuwingen toe: te veel waarschuwingen leren mensen “ja” te klikken zonder te lezen.
Regels van je winkel voor de chat. In de kaart Instellingen: veiligheid, meldingen, limieten schrijf je eigen regels, één per regel, bijvoorbeeld “We tutoyeren onze klanten”, “Gebruik nooit het woord goedkoop”, “Beschrijvingen tot 600 tekens” (in totaal tot 1000 tekens). De chat krijgt ze bij elke verbinding. Ze zetten het voorbeeld of jouw akkoord vóór het opslaan nooit uit.
Elke wijziging kun je ongedaan maken
- Vraag “Wat heb je gisteren gewijzigd?” en de chat toont de lijst. De kaart Wijzigingsgeschiedenis in de module toont hem ook.
- Vraag “Maak die wijziging ongedaan” en de chat zet de vorige waarde terug, opnieuw na een voorbeeld. Een hele reeks maak je met één zin ongedaan, ook 40 producten tegelijk.
- Nieuwe producten, categorieën en pagina’s die de chat heeft gemaakt, worden op dezelfde manier verwijderd.
- Bestanden (thema, modules, winkelbestanden): vóór elke wijziging wordt een back-up gemaakt, die je terugzet vanuit de chat of vanuit de kaart Bestandsback-ups.
- Databasewijzigingen in het onderdeel Onderhoud: de gewijzigde rijen worden eerst gekopieerd.
- Pagina-adressen: de chat zet het adres terug en controleert of het oude doorverwijst.
- Database: de module maakt een back-up van de hele winkeldatabase wanneer je de connector aanzet, vóór de eerste wijziging van elke dag, voordat Thema, Modules of Onderhoud aangaat, en wanneer je op Nu back-up maken klikt. De laatste 2 back-ups worden bewaard, versleuteld.
Een paar handelingen maak je op een andere manier ongedaan dan via de wijzigingsgeschiedenis, bijvoorbeeld het verwijderen van een module of een wijziging in de databasestructuur in Onderhoud. De chat zegt dat in het voorbeeld, voordat je iets goedkeurt, en stelt een veiligere weg voor, zoals een module uitschakelen in plaats van verwijderen.
Jij kiest wat de chat mag aanraken
De module leest meteen de hele winkel, behalve de vaste blokkades. Opslaan zet je per onderdeel aan in de kaart Opslaan per gebied:
| Gebied | Wat het omvat | Hoe lang het aan blijft |
|---|---|---|
| Content en SEO, Catalogus | beschrijvingen, vertalingen, SEO, CMS-pagina’s, blog, producten, categorieën, kenmerken, afbeeldingen | altijd, met een actieve Pro-licentie |
| Verkoop | prijzen, acties, kortingscodes, voorraad, varianten, verzending | tot je het uitzet |
| Thema | themabestanden, child-thema, CSS, templates, moduleposities | 24 uur, daarna gaat het vanzelf uit |
| Modules | installeren, updaten, instellingen en bestanden van modules | 24 uur, daarna gaat het vanzelf uit |
| Onderhoud | technisch werk: serverbestanden, database, instellingen | 3 uur, daarna gaat het vanzelf uit |
- De schakelaar wordt gecontroleerd op het moment dat je een wijziging goedkeurt. Verloopt hij tijdens het werk, dan stopt de chat bij het voorbeeld en zegt hij wat je moet aanzetten.
- Elke chat kun je koppelen als Alleen lezen: dan ziet hij helemaal geen tools om op te slaan.
- Zonder Pro-licentie leest de module alleen en maakt hij plannen; hij slaat niets op.
- De chat werkt als eigen medewerker, alleen met de rechten die jij geeft. Het logboek van de winkel toont alles wat hij deed.
- Limieten per uur: standaard 300 aanroepen, 150 opslagacties en 20 bestandsopslagen. Je wijzigt ze in de kaart Instellingen: veiligheid, meldingen, limieten. Vóór werk aan meer dan ongeveer 20 items controleert de chat of het binnen de limieten past en stelt hij anders etappes voor. Een reeks wijzigingen stopt nooit halverwege.
Wie verbinding kan maken met je winkel
De chat meldt zich met OAuth 2.1 aan bij je winkel. Het winkeladres voor de chat is niet geheim, want het adres alleen geeft geen toegang. Een chat die verbinding wil maken, opent het venster van je winkel, en jij klikt op Toestaan of Weigeren en kiest de toegang: lezen en wijzigingen met jouw akkoord, of alleen lezen.
- Standaard kunnen alleen Claude en ChatGPT verbinding maken.
- Elke verbonden chat zie je in de kaart Verbonden chats (wie hem goedkeurde, sinds wanneer, wanneer hij voor het laatst werd gebruikt) en je koppelt hem los met Ontkoppelen. De chat verliest meteen de toegang.
- Bij elke nieuwe verbinding krijg je de e-mail “Nieuwe chat verbonden met je winkel”.
- Verbindingen gaan alleen via HTTPS.
Klik alleen op Toestaan als je net zelf een chat met je winkel hebt verbonden. TellMyShop vraagt je nooit een code in te typen die je per e-mail, telefoon of chat krijgt.
Het oudere adres met sleutel (van vóór 2.8) blijft in bijgewerkte winkels werken tot je het uitzet in Verbonden chats → Geavanceerd: hoe chats verbinden. Bewaar zo’n adres als een wachtwoord. Zodra elke chat met aanmelding verbindt, zet je het uit; daarbij wordt het oude adres verwijderd. Nieuwe installaties hebben het vanaf het begin uit.
Je hoort van elke belangrijke wijziging
- Een e-mail bij elke nieuw verbonden chat en bij elke ruimere toegang: Verkoop, Thema, Modules of Onderhoud aangezet, toegang tot klantgegevens aan, IP-lijsten geleegd, meldingen uit.
- Een dagelijkse samenvatting per e-mail op dagen dat er iets gebeurde: hoe vaak de chat verbinding maakte, wat hij wijzigde en eventuele meldingen.
- Een melding bij ongewone activiteit: veel wijzigingen in korte tijd, of een adres dat na 20 mislukte verbindingspogingen is geblokkeerd.
- Een controle van de eigen bestanden van de module. Wijzigt of voegt iemand een bestand toe in de module, dan krijg je een melding.
- Een noodsleutel. Laat een technische wijziging de winkel op een lege pagina staan, dan open je het noodadres, voer je de sleutel in en zet de module de gewijzigde bestanden terug. Dat werkt ook als de winkel niet laadt.
Meldingen gaan naar het e-mailadres van de winkel, tenzij je een ander instelt.
Extra veiligheid bij prijzen
- Een prijs kan niet op 0 worden gezet.
- Een prijswijziging van meer dan 30 % vraagt jouw extra akkoord.
- Een korting van meer dan 90 % vraagt jouw extra akkoord; boven 50 % krijg je een waarschuwing.
- Nieuwe kortingscodes starten uitgeschakeld. Je controleert ze voordat klanten ze kunnen gebruiken.
De gegevens van je klanten
Klantgegevens zijn niet toegankelijk voor AI en versleuteld in de wijzigingsgeschiedenis. De bescherming van klantgegevens is een aparte functie, los van de gebieden voor opslaan: Verkoop, Thema of Modules aanzetten legt geen persoonsgegevens bloot. TellMyShop helpt je aan de eisen van de AVG, UK GDPR, CCPA/CPRA en LGPD te voldoen.
In de kaart Klantgegevens (AVG) kies je een van drie niveaus:
- Niet toegankelijk (na de installatie). De chat ziet geen klanten, adressen of berichten. Verkooprapporten tonen producten en bedragen, zonder namen.
- Gepseudonimiseerd. De chat ziet bestellingen, berichten en statistieken, maar namen zijn ingekort tot initialen, en e-mails, telefoonnummers en adressen zijn vervangen door een alias zoals “Klient-3f9a1c”. De chat kan zeggen “deze klant bestelde 3 keer” zonder te weten wie het is. Klantgegevens wijzigen kan hij niet.
- Volledige toegang (tijdelijk). Voor 1, 4, 8 of 24 uur, met een doel dat je zelf invult, bijvoorbeeld “klacht over bestelling 1234”. Daarna gaat de toegang vanzelf terug naar het vorige niveau en krijg je een e-mail.
Zo werkt het:
- De module vindt persoonsgegevens zelf, ook in tabellen van modules van andere makers (reviews, nieuwsbrieven, loyaliteitsprogramma’s). De kaart Klantgegevens (AVG) toont hoeveel tabellen hij vond.
- Versleuteling. Regels in de wijzigingsgeschiedenis met klantgegevens en alle bestandsback-ups zijn versleuteld (libsodium), en de sleutel staat in een bestand buiten de database. Een lek van alleen de database legt deze regels niet bloot.
- Altijd geblokkeerde bestanden: bestanden met wachtwoorden en sleutels, klantbestanden (
upload/,download/), serverlogs, databasedumps en back-ups,.giten de eigen bestanden van de module. In logs en berichten zijn e-mails, telefoonnummers en IP-adressen gemaskeerd. - Auditlogboek: wie wanneer volledige gegevenstoegang, Onderhoud en de licentie aanzette. Het kan niet vanuit het paneel worden geleegd; je downloadt het als CSV.
- De AVG-module van PrestaShop (psgdpr): het wissen of exporteren van de gegevens van een klant omvat ook de geschiedenis van TellMyShop.
- Teksten voor de documenten van je winkel: de module stelt een stuk voor je privacyverklaring en een regel voor het verwerkingsregister voor.
Je winkel blijft verwerkingsverantwoordelijke voor de gegevens van zijn klanten. De verdeling van taken staat in de verwerkersovereenkomst.
Waar je gegevens naartoe gaan
- De module draait op je eigen server. De chat maakt er rechtstreeks verbinding mee, zonder tussenpersoon.
- Als de chat iets leest, gaat dat van je winkel naar je account bij Claude of ChatGPT. Voor gesprekken gelden de voorwaarden van de chataanbieder; TellMyShop ziet ze niet en traint er geen modellen mee.
- De server van TellMyShop ontvangt je producten, bestellingen of klanten niet. De licentiecontrole stuurt alleen je licentiesleutel, het domein van de winkel, een willekeurige installatie-ID en versienummers (module, PrestaShop, PHP). In het paneel kun je zelf startstatistieken aanzetten: alleen getallen, geen winkelcontent en geen klantgegevens.
Tekst in je winkel is geen opdracht
Een productbeschrijving, reactie of bericht van een klant kan tekst bevatten die eruitziet als een opdracht voor AI. TellMyShop heeft daar meerdere beveiligingen tegelijk voor: de chat krijgt de opdracht om winkelcontent als tekst te behandelen, en resultaten met winkelcontent dragen dezelfde herinnering. Wachtwoorden, betalingen en belastingen zijn altijd geblokkeerd, riskante onderdelen zet alleen jij aan en elke wijziging wacht op een voorbeeld en jouw “ja”.
Beveiligingscontrole
In oktober 2026 kreeg versie 2.8 van de modules en de website van TellMyShop punt voor punt een beveiligingscontrole, met automatische tests en tests in een winkel met PrestaShop 8.1. De verbeteringen uit de controle zitten in versie 2.8.1.
| Standaard | Wat hij controleert | Resultaat |
|---|---|---|
| OWASP ASVS 5.0, niveaus 1–2 | de algemene standaard voor applicatiebeveiliging: codering van gegevens, validatie, bestanden, aanmelding, sessies, rechten, cryptografie, communicatie, logging | alle hoofdstukken nagelopen; geen lek waardoor een buitenstaander in een winkel of klantaccount kan komen |
| OWASP Top 10 voor LLM-toepassingen (2025) | risico’s die specifiek zijn voor AI: verborgen opdrachten in content, datalekken, te veel handelingsvrijheid, onbeperkt verbruik | voorbeeld en akkoord voor elke opslag, vaste blokkades, schakelaars met tijdslimiet, limieten |
| OAuth 2.1, RFC 9700, MCP-autorisatiespecificatie | veilige aanmelding van de chat | 44 van de 44 aanmeldtests geslaagd |
| CWE Top 25 (2025) | de 25 gevaarlijkste soorten zwakke plekken in code: SQL-injectie, XSS, CSRF, path traversal, SSRF en meer | beveiliging op alle punten die voor PHP en TypeScript gelden |
Officiële modulevalidator van PrestaShop: geen opmerkingen in de onderdelen beveiliging, licenties, structuur, vertalingen en optimalisatie (versie 2.8.1). De WordPress-plug-in is gebouwd volgens de richtlijnen van WordPress voor plug-ins.
Een kwetsbaarheid gevonden? Schrijf naar [email protected] voordat je details publiceert.
Technische details
Chat-aanmelding (OAuth 2.1). De module is voor de chat de autorisatieserver en de resourceserver. Alleen authorization code, met verplichte PKCE (S256); geen implicit flow en geen password grant. Exacte vergelijking van de redirect-URI (uitzondering alleen voor de loopbackpoort, RFC 8252). Eenmalige codes; hergebruik trekt de verbinding in. Rotatie van het refresh token met detectie van hergebruik. Ondoorzichtige tokens, alleen in de header Authorization, opgeslagen alleen als SHA-256-hash. Binding aan de ontvanger (RFC 8707 resource), iss in het antwoord (RFC 9207), metadata van de autorisatieserver (RFC 8414) en van de beschermde resource (RFC 9728), WWW-Authenticate bij 401, clientregistratie (CIMD en RFC 7591) met limieten, intrekking (RFC 7009). Toestemmingsvenster: CSRF-token (HMAC) en een __Host--cookie, frame-ancestors 'none', X-Frame-Options: DENY. Toestemming: de eigenaar is in dezelfde browser aangemeld in de back-office, of een code uit het chatvenster, 15 minuten geldig, ingevoerd in de kaart Verbonden chats. De scope shop.read verbergt de tools om op te slaan. Aanmelding vraagt hosting die de header Authorization doorgeeft; de verbindingstest in het paneel controleert dat.
Adres met sleutel (oudere methode). Een vast token in de URL (?token=) of in de header Authorization: Bearer, aangezet in Verbonden chats → Geavanceerd; uit in nieuwe installaties. Alleen de SHA-256-hash en een prefix worden opgeslagen; het volledige token wordt één keer getoond; een nieuw token trekt het oude meteen in. Gebruik de header waar de client dat ondersteunt.
Beveiligingen van het endpoint (src/Endpoint.php, in deze volgorde):
| # | Beveiliging | Waarde |
|---|---|---|
| 1 | Moduleschakelaar | Uit na installatie tot de eigenaar hem aanzet (503) |
| 2 | Transport | Alleen HTTPS (403) |
| 3 | IP-blokkade | 20 mislukte aanmeldingen vanaf één IP binnen 10 minuten; melding aan de eigenaar (429) |
| 4 | IP-allowlist | Optioneel; leeg = geen beperking |
| 5 | Origin | Een verzoek met een header Origin moet komen van https://claude.ai, https://claude.com, https://chatgpt.com of https://chat.openai.com (andere = 403); server-naar-serverclients zonder Origin gaan door naar de aanmelding |
| 6 | Aanmelding | OAuth-toegangstoken of het token van het adres met sleutel |
| 7 | Limieten | Limieten per uur voor aanroepen, opslagacties en bestandsopslagen uit het paneel. Een reeks van maximaal 50 items telt als één opslag; de limiet wordt vóór het opslaan gecontroleerd. Resterende limieten staan in elk voorbeeld en elk resultaat; ps_check_capacity controleert een geplande klus |
| 8 | Gebieden | Licentie, reikwijdte van de verbinding en schakelaars van de gebieden gecontroleerd bij elke aanroep en op het moment van akkoord |
| 9 | Rechten | Per tabblad van de back-office en actie van de connectormedewerker (ExecutionContext::requirePermissions); SuperAdmin geweigerd |
IP van de client: proxyheaders (CF-Connecting-IP, X-Forwarded-For) worden alleen gebruikt als “Winkel achter een proxy / Cloudflare” aan staat en de directe peer op de lijst met vertrouwde proxy’s staat.
Schrijfacties. change_token = HMAC van tool, argumenten en een hash van de toestand “voor”; 30 minuten, eenmalig; uitvoering wordt geblokkeerd als de gegevens na het voorbeeld zijn veranderd. Opslaan gaat via ObjectModel (ObjectWriter): validatie per veld, alleen gewijzigde velden, hooks actionObject…Update*, regel in het PrestaShop-logboek met de ID van de connectormedewerker, wijzigingsgeschiedenis die elke gewijzigde rij vastlegt, ook rijen die andere modules onderweg wijzigden. Details: Specificatie §5.
Bestanden. Thema: Smarty-whitelist en testcompilatie (SmartyGuard), JSON-controle, waarschuwingen bij nieuwe scripts en externe domeinen, parent-thema alleen-lezen. Modules en winkelbestanden (Files\Zone): alleen relatieve paden, realpath() binnen de zone, alleen tekstextensies; ZIP-pakketten van modules gecontroleerd vóór het uitpakken (zip-slip). Altijd geweigerd: app/config/parameters.*, config/settings*.inc.php, .env*, *.key|pem|p12|crt|sql|sql.gz|dump|bak, .git, .svn, var/logs, upload, download, de privémap van de module en de module zelf. PHP-bestanden: syntaxcontrole met token_get_all(TOKEN_PARSE) vóór het schrijven; geen tool om code uit te voeren. Vóór elke schrijfactie een back-up; back-ups 90 dagen bewaard, minstens de laatste 5 per bestand. Ophalen van afbeeldingen en pakketten: alleen publieke IP’s, vastgezet op de verbinding, geen doorverwijzingen naar het interne netwerk (SSRF).
SQL (onderdeel Onderhoud). ps_db_query (Pro): SELECT/SHOW/DESCRIBE/EXPLAIN in een READ ONLY-transactie, max. 200 rijen, e-mails en telefoonnummers gemaskeerd. ps_db_execute (schakelaar Onderhoud, 3 u): één statement, geen commentaar (SqlGuard); UPDATE/DELETE op één tabel maken eerst een back-up van de betrokken rijen (max. 1000) en worden teruggedraaid als er meer rijen veranderen dan opgegeven; INSERT wordt ongedaan gemaakt door de rij te verwijderen; structuurwijzigingen worden in het voorbeeld gemarkeerd. Altijd geblokkeerd: medewerkers, sessies, profielen en toegang, configuration (via ps_config, geheimen gemaskeerd), webservice en API-clients, tabellen van de connector. Tabellen met persoonsgegevens alleen op klantgegevensniveau pseudo (gemaskeerd) of full. Onderhoud is volledige technische toegang, daarom gaat het voor 3 uur aan, vraagt het een geslaagde databaseback-up en komt het in het auditlogboek.
Klantgegevens (src/Privacy/PersonalData.php). Niveaus off / pseudo / full (CUSTOMER_DATA); full alleen voor 1/4/8/24 u met een opgegeven doel en een uitdrukkelijke bevestiging, daarna terug naar het vorige niveau. Herkenning: vaste lijst met tabellen van PrestaShop en veelgebruikte modules (customer, address, orders, cart, messages, newsletter, psgdpr…) plus elke tabel met een kolom waarvan de naam past bij patronen voor e-mail, voor-/achternaam, telefoon, adres, postcode, IP, geboortedatum, fiscaal nummer of geheimen, gelezen uit information_schema; zakelijke tabellen (contact, store, supplier, manufacturer, warehouse, carrier) uitgesloten. Maskering op niveau pseudo: e-mail, telefoon, adres en identiteitsnummers → alias Klient- + 6 hex-tekens (HMAC-SHA256 met een dagsleutel afgeleid van var/tellmyshop/keys/pseudonym.key); naam → initialen plus de alias; IPv4 → eerste twee octetten, IPv6 verborgen; geboortedatum → jaar; geheimen → ***. Vrije tekst (logs, berichten, bestanden): e-mails ingekort tot j***@g***.com, telefoonnummers, IP’s, tokens en headers Authorization gemaskeerd. ps_list_changes maskeert klantgegevens in elke regel, ongeacht CUSTOMER_DATA.
Databaseback-ups (src/Storage/DbBackup.php). Volledige SQL-dump, gzip, versleuteld, in var/tellmyshop/db-backups/; gemaakt als de connector aangaat, vóór de eerste goedgekeurde wijziging van de dag, vóór Thema, Modules of Onderhoud, en met Nu back-up maken; laatste 2 bewaard; verwijderd als de connector uitgaat en bij het verwijderen van de module. Geen transactionele snapshot. Houd ook je eigen serverback-ups bij.
Versleuteling (src/Security/Crypto.php). libsodium secretbox (XSalsa20-Poly1305), een willekeurige sleutel van 32 bytes in var/tellmyshop/keys/history.key, buiten de database. Versleuteld: wijzigingsgeschiedenis van objecten met klantgegevens, alle bestandsback-ups en databaseback-ups. Maak een back-up van het sleutelbestand samen met je serverback-up en bewaar de kopie apart: zonder de sleutel kun je versleutelde wijzigingen niet ongedaan maken.
psgdpr. Hooks actionDeleteGDPRCustomer (wist de gegevens van de klant uit de versleutelde geschiedenis) en actionExportGDPRData (somt de handelingen van de connector op die de klant raakten, zonder waarden).
Meldingen aan de eigenaar (src/Security/Alerts.php). E-mail en logregel met status ALERT bij: een nieuw verbonden chat, klantgegevens pseudo/full, onderdeel Verkoop, Thema, Modules of Onderhoud aangezet, IP-lijsten geleegd, meldingen uit, een golf van schrijfacties (20 in 10 minuten), IP-blokkade, schending van de integriteit van de modulebestanden. Dezelfde gebeurtenis hooguit eens per 15 minuten (gebeurtenissen uit het paneel altijd). Dagelijkse samenvatting eens per 24 u. Integriteit (src/Security/Integrity.php): SHA-256 van elk bestand vergeleken met de schijf; gewijzigde, verwijderde en toegevoegde PHP-bestanden worden opgesomd; gecontroleerd bij elk bezoek aan het paneel en hooguit elke 6 u door de connector.
Noodsleutel (src/Security/RescueKey.php). Eén keer getoond; alleen de SHA-256 ervan wordt opgeslagen. Een script wordt onder een willekeurige naam naar de hoofdmap van de winkel gekopieerd, omdat PrestaShop directe PHP-aanroepen in modules/ blokkeert. Het zet door de connector gewijzigde bestanden terug en zet Onderhoud uit; databasewijzigingen worden teruggezet uit de wijzigingsgeschiedenis of een databaseback-up. Wordt verwijderd bij het verwijderen van de module.
Bewaartermijnen. Verbindingslogboek 30 dagen (7–180); wijzigingsgeschiedenis 180 dagen (30–730); bestandsback-ups 90 dagen met minstens 5 per bestand; databaseback-ups: de laatste 2.
Niet nodig: PrestaShop Account, Eventbus. Uitgaande verbindingen: de licentieserver (https://tellmyshop.com/api/v1), de eigen pagina’s van de winkel (HttpProbe, URL-controles), ZIP-adressen van modules en afbeeldings-URL’s die de chat op verzoek van de eigenaar doorgeeft.
Checklist voor IT
- Eigen inactieve medewerker en profiel, geen SuperAdmin (de knop in het paneel voor het connectoraccount regelt dit).
- Lijst Verbonden chats nagelopen, onbekende chats ontkoppeld; chats die niet hoeven op te slaan gekoppeld als “Alleen lezen”.
- Adres met sleutel uitgezet als het niet nodig is.
- Verkoop, Thema, Modules en Onderhoud alleen aangezet zolang het werk duurt; noodsleutel aangemaakt en buiten de winkel bewaard.
- Klantgegevens op “Niet toegankelijk”, tenzij een taak ze nodig heeft; volledige toegang alleen met een opgegeven doel.
- IP-allowlists nagelopen; proxyinstelling juist als de winkel achter Cloudflare staat.
- E-mailadres voor meldingen gecontroleerd.
- Bestand met de versleutelingssleutel meegenomen in de serverback-up.
-
ps_check_shop_healthuitgevoerd vóór grotere wijzigingen.
PrestaShop is een geregistreerd handelsmerk van PrestaShop SA. Claude is een handelsmerk van Anthropic. ChatGPT is een handelsmerk van OpenAI. TellMyShop is aan geen van hen verbonden.
Laatst bijgewerkt: 2026-10-04