Die Maskierung bestimmen Sie – und sie greift vor dem Netzwerk
Das Browser-SDK maskiert standardmäßig, was Menschen tippen – ein Replay zeigt das Formular also mit Sternchen ausgefüllt, und Sie sehen trotzdem das missverstandene Label und das Feld, das die Validierung nicht bestand. maskAllInputs: false zeichnet die Werte selbst auf, maskAllTyping: true maskiert zusätzlich Rich-Text-Editoren. Darunter liegt ein Boden, den keine Option anheben kann: Passwörter, Einmalcodes, Kartennummern, Prüfziffern, Ablaufdaten, Bankverbindungen und jeder Wert, der aussieht wie eine Kartennummer, werden auf dem Gerät oder im Browser ersetzt, bevor auch nur ein Byte gesendet wird. Nichts wird hochgeladen und dann ausgeblendet, denn ausgeblendet ist nicht dasselbe wie nicht vorhanden.
Wie viel eine Aufzeichnung enthält, entscheiden also Sie – und das sagen wir lieber deutlich, als Sie im Glauben zu lassen, sie sei leer. Markieren Sie die sensiblen Stellen Ihrer Seiten mit ar-mask: Sie behalten ihre Form und verlieren ihre Wörter. Bleibt jedes Feld maskiert, sieht die prüfende Person immer noch, dass ein Feld ausgefüllt wurde, wo und wie lange es gedauert hat. Alles Nachgelagerte – Speicherung, Replay, Übersetzung – sieht nur das, was den Browser verlassen hat. Die Dokumentation zur Maskierung listet genau auf, was nie aufgezeichnet wird.
Die Replay-Sandbox: drei Schutzwälle, ein Test
Der Player rendert das DOM eines Kunden innerhalb des Dashboards. Drei Schutzmaßnahmen verhindern, dass daraus eine mandantenübergreifende Kompromittierung wird:
- Script-Inhalte verlassen nie die Seite des Kunden. rrweb ersetzt sie schon bei der Aufzeichnung durch einen Platzhalter.
- Scripts werden als noscript wiederhergestellt. Selbst wenn das Markup Code enthielte, könnte das Replay ihn nicht ausführen.
- Das Replay-iframe läuft in einer Sandbox ohne allow-scripts. rrweb fügt diese Berechtigung nur hinzu, wenn Canvas-Replay aktiviert ist. Sie bleibt also aus – und ein Test lässt den Build fehlschlagen, sobald jemand sie einschaltet.
Im echten Browser geprüft, meldet das Replay-iframe sandbox="allow-same-origin", und die Script-Tags der aufgezeichneten Seite kommen als noscript zurück. Mobile Sessions werden als strukturierte Daten statt als Markup aufgezeichnet – dort gibt es gar kein fremdes DOM zu rendern.
Der Projektschlüssel ist öffentlich. Die Origin-Allowlist nicht.
Der Schlüssel in Ihrem Snippet steht in Ihrem HTML, kann also kein Geheimnis sein und wird auch nicht als solches behandelt. Der Ingest ist ein separater Service mit dem entgegengesetzten Lastprofil zum Dashboard – hohes Volumen, ohne Authentifizierung, nur schreibend –, und die eigentliche Zugriffskontrolle ist seine serverseitige Origin-Allowlist, die eine Seite nicht fälschen kann. Eine App hat keinen Web-Origin; sie wird anhand der Bundle-ID, die sie als appId sendet, mit den Erlaubten Apps des Projekts abgeglichen – ein Filter gegen fremden Traffic, kein Geheimnis. Zusätzlich erzwingt der Ingest Rate Limits – 120 Anfragen pro Minute und Gerät, damit ein einzelnes Telefon nicht das Budget eines Projekts aufbraucht –, idempotente Chunk-Uploads und die Validierung der Payload, jeweils durch eigene Tests abgedeckt.
Mandantentrennung, von außen geprüft
Jede organisationsbezogene Route wird in der Testsuite aus einem fremden Mandanten heraus angesprochen. Chunk-Schlüssel enthalten Projekt- und Session-ID, und jeder Lesezugriff auf Chunks ist auf die Organisation beschränkt – ein ungeprüfter Lesezugriff kann die Aufzeichnung eines anderen Kunden also nicht an jemanden streamen, der bloß eine ID kennt. Eine Ressource, die Ihnen nicht gehört, antwortet mit 404, nie mit 403: Die API verrät nicht, was existiert.
Konten, Rollen und das Audit-Log
Passwörter werden mit Argon2id und OWASP-Parametern gehasht, per Test abgesichert. Refresh-Tokens rotieren, und ein wiederverwendetes Token widerruft seine gesamte Token-Familie. Fünf Rollen – Inhaber, Administrator, Moderator, Mitglied und Betrachter – bilden eine Berechtigungsmatrix, die die API durchsetzt und die Tests Zelle für Zelle abdecken; keine Rolle kann eine Rolle auf gleicher oder höherer Stufe vergeben. Berechtigungsänderungen, Löschungen und Schlüsselrotationen werden in ein Append-only-Audit-Log geschrieben.
Aufbewahrungsdauer, die Sie festlegen – Löschung, die Sie belegen können
Die Aufbewahrungsdauer wird pro Organisation in Tagen konfiguriert. Ein Bereinigungsjob entfernt ältere Aufzeichnungen nach festem Zeitplan, die Löschung wird im Audit-Log festgehalten, und die 14 Tage des Free-Plans funktionieren genauso wie ein längerer Zeitraum in einem bezahlten Plan. Beide SDKs bieten eine Einwilligungsabfrage (requireConsent zeichnet nichts auf, bis Sie es freigeben), und die Datenschutzerklärung beschreibt, was AnyReplay selbst über Ihr Team speichert.
Was wir Ihrem Sicherheitsteam sagen würden
Die API-Testsuite startet die echte Anwendung gegen eine echte PostgreSQL-Datenbank und spricht sie über HTTP an. Nichts ist gemockt, denn ein Autorisierungstest, der die Prüfung selbst mockt, beweist nichts. Für das Browser-SDK gilt ein Bundle-Budget, das in der CI durchgesetzt wird. Jede Antwort trägt Security-Header. Wenn Sie einen Sicherheitsfragebogen oder einen AVV (Auftragsverarbeitungsvertrag) benötigen, ist das Teil des Enterprise-Plans auf der Preisseite; die Vergleichsseiten stellen diese Entscheidungen denen anderer Tools gegenüber.
