Render nicht vertrauenswürdige Daten als Text, nie als Markup: lass das Framework escapen und meide innerHTML, dangerouslySetInnerHTML und v-html. Musst du HTML annehmen, sanitize es serverseitig oder mit einem gepflegten Sanitizer, bevor es das DOM berührt. Ergänz eine Content Security Policy mit Nonces, damit Inline-Script gar nicht erst infrage kommt, validier URLs, damit kein javascript-Schema in einem href landet, und halt Tokens aus jedem Speicher raus, den ein Script lesen kann.
Warum Interviewer das fragen
Frameworks escapen standardmäßig, Interviewer wollen also wissen, ob du die verbleibenden Löcher kennst: rohe HTML-Injektion, Attribut- und URL-Sinks und Third-Party-Scripts. Die Antwort zeigt, ob du in Sources und Sinks denkst oder dir nur merkst, zu escapen. CSP und Trusted Types zu erwähnen signalisiert, dass du Defense in Depth ausgeliefert hast und nicht annimmst, das Framework erledige alles für dich.
So baust du deine Antwort auf
- Fang beim Standard an: escapen, indem als Text gerendert wird.
- Nenn die konkreten Sinks, die das Framework umgehen.
- Deck URL- und Attribut-Injektion ab, nicht nur Elementinhalte.
- Ergänz die gestaffelten Verteidigungen: CSP, Sanitizer, Token-Speicherung.
Beispielantwort
Die Basis ist, dass alles Nichtvertrauenswürdige als Text gerendert wird, und das macht das Framework für mich. Die eigentliche Arbeit ist also, die Stellen zu prüfen, die sich davon abmelden. Jedes innerHTML, jedes dangerouslySetInnerHTML, jedes Templating, das rohes Markup schreibt, plus die Sinks, die Leute vergessen: ein href, das aus Nutzereingaben gebaut wird, kann ein javascript-Schema tragen, und ein style- oder srcdoc-Attribut ist genauso gefährlich. Braucht ein Feature wirklich Rich Text, etwa nutzergeschriebene Beschreibungen, sanitize ich mit einer gepflegten Bibliothek und einer Allowlist, statt selbst Tags zu filtern, und ich mache das so nah wie möglich an der Speicherung. Obendrauf will ich eine Content Security Policy mit einem Nonce, damit Inline-Script schlicht nicht ausgeführt wird, was die meisten Restbugs in eine blockierte Konsolenmeldung statt in einen Vorfall verwandelt. Und Session-Tokens halte ich in HttpOnly-Cookies, denn wenn doch mal ein Payload durchkommt, sollte der Schadensradius nicht die Session des Nutzers einschließen.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Wo hilft dir eine Content Security Policy nicht weiter?
- Wie würdest du nutzereingereichten Rich Text sicher rendern?
- Was ist DOM-basiertes XSS, und warum verpassen es serverseitige Filter?
Weitere Fragen für Frontend-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen