Rendez les données non fiables comme du texte, jamais comme du balisage : laissez le framework échapper et évitez innerHTML, dangerouslySetInnerHTML et v-html. Si vous devez accepter du HTML, assainissez-le côté serveur ou avec un sanitizer maintenu avant qu'il ne touche le DOM. Ajoutez une Content Security Policy avec des nonces pour supprimer le script inline comme option, validez les URL pour qu'un schéma javascript ne finisse pas dans un href, et gardez les jetons hors de tout stockage lisible par un script.
Pourquoi les recruteurs posent cette question
Les frameworks échappent par défaut, donc les recruteurs veulent savoir si vous comprenez les trous qui restent : l'injection de HTML brut, les points de sortie dans les attributs et les URL, et les scripts tiers. La réponse montre si vous pensez en termes de sources et de points de sortie ou si vous vous souvenez seulement d'échapper. Mentionner CSP et les trusted types indique que vous avez livré de la défense en profondeur plutôt que de supposer que le framework gère tout à votre place.
Comment structurer votre réponse
- Commencez par la règle par défaut : échapper en rendant comme du texte.
- Nommez les points de sortie précis qui contournent le framework.
- Couvrez l'injection dans les URL et les attributs, pas seulement le contenu des éléments.
- Ajoutez les défenses en couches : CSP, sanitizer, stockage des jetons.
Exemple de réponse
La base, c'est que tout ce qui n'est pas fiable est rendu comme du texte, ce que le framework fait pour moi. Donc le vrai travail, c'est d'auditer les endroits qui s'en dispensent. Tout innerHTML, tout dangerouslySetInnerHTML, tout templating qui écrit du balisage brut, plus les points de sortie qu'on oublie : un href construit à partir d'une saisie utilisateur peut porter un schéma javascript, et un attribut style ou srcdoc est tout aussi dangereux. Si une fonctionnalité a vraiment besoin de texte riche, par exemple des descriptions écrites par les utilisateurs, j'assainis avec une bibliothèque maintenue et une liste d'autorisation plutôt que d'essayer de filtrer les balises moi-même, et je le fais aussi près du stockage que possible. Par-dessus, je veux une Content Security Policy avec un nonce pour que le script inline ne s'exécute tout simplement pas, ce qui transforme la plupart des bugs résiduels en message bloqué dans la console plutôt qu'en compromission. Et je garde les jetons de session dans des cookies HttpOnly, parce que si une charge utile atterrit, le rayon d'explosion ne devrait pas inclure la session de l'utilisateur.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Où une Content Security Policy ne vous aide-t-elle pas ?
- Comment rendriez-vous du texte riche soumis par les utilisateurs de façon sûre ?
- Qu'est-ce que le XSS basé sur le DOM, et pourquoi les filtres côté serveur le manquent-ils ?
Autres questions pour Développeur frontend
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions