Je tourne ici en dernier recours. J'ai parcouru google et j'ai de la difficulté à trouver une solution. J'ai un formulaire avec un élément textarea qui vous permet de taper html dans la zone et il affichera le balisage HTML en cours de frappe si vous avez activé le mode de prévisualisation. Pas trop différent de la façon dont StackOverflow affiche l'aperçu ci-dessous un nouveau message.Comment rendre un aperçu en direct HTML textarea sûr contre HTML/Script Injection
Cependant, j'ai récemment découvert que ma fonctionnalité a une vulnérabilité. Tout ce que je suis arrivé à faire est de taper quelque chose comme:
</textarea>
<script>alert("Hello World!");</script>
<textarea style="display: none;">
Et non seulement cette course à l'intérieur du textarea en direct, si vous enregistrez le formulaire et reload ces données sur une autre page ce code exécute toujours dans la zone de texte sur ladite page différente, mais à l'insu de l'utilisateur; à eux tout le voir est un textarea (s'il n'y a pas d'alerte évidemment).
J'ai trouvé cet article; Live preview of textarea input with javascript html, et j'ai tenté de refactoriser mon JS à la réponse acceptée, car j'ai remarqué que je ne pouvais pas écrire une balise de script dans l'exemple JSFiddle, mais peut-être que JSFiddle bloquait ce comportement, mais je ne pouvais pas le faire fichier.
Ces quelques lignes est ce que j'utilise pour vivre rendre le balisage HTML:
$(".main").on("keyup", "#actualTextArea", function() {
$('#previewTextArea').html($('#actualTextArea').val());
});
$(".main").on("keydown", "#actualTextArea", function() {
$('#previewTextArea').html($('#actualTextArea').val());
});
Est-il possible, cela peut être refactorisé il est sûr? Ma seule idée pour le moment est d'effacer la prévisualisation en direct et d'utiliser une bascule on/off et de l'encoder, mais je pense vraiment que c'est une fonctionnalité intéressante et que je voudrais la garder en ligne au lieu de basculer. Y a-t-il un moyen de "l'encoder en direct" ou d'échapper à certaines étiquettes ou quelque chose?
Cela ne protège pas contre la vulnérabilité que j'ai partagé ci-dessus ... :(J'essaie d'empêcher l'exécution des balises de script. –