Skip to content

Commit 4de1ff8

Browse files
committed
fix: userInput sanitization
Merci à Phyo Min Lwin pour avoir repéré ce bug et permis de le corriger !
1 parent 318557e commit 4de1ff8

4 files changed

Lines changed: 23 additions & 4 deletions

File tree

js/chatbot/typewriter.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { scrollWindow } from "../utils/ui.js";
2+
import { sanitizeHtml } from "../utils/strings.js";
23
import { yaml } from "../processMarkdown/yaml.js";
34
import Typed from "../externals/typed.js";
45
import { processCopyCode } from "../processMarkdown/directivesAndSpecialContents.js";
@@ -293,6 +294,13 @@ function typeWriter(content, element, accelerateFactor) {
293294
});
294295
}
295296

297+
const allowedTagsInUserInput = [
298+
"<p>",
299+
"</p>",
300+
'<span class="hidden">',
301+
"</span>",
302+
];
303+
296304
export function displayMessage(html, isUser, chatMessage, container) {
297305
return new Promise((resolve) => {
298306
// On affiche le message dans un container. Par défaut on affiche le message comme un nouveau message dans le chat, mais on peut définir un container (pour afficher le message comme un élément enfant d'un nouveau message en cas de génération de message à la fois via le markdown et un LLM : dans ce cas, il faut que le contenu des messages se suivent, dans un même message, au lieu d'ajouter un nouveau message à chaque fois)
@@ -312,7 +320,12 @@ export function displayMessage(html, isUser, chatMessage, container) {
312320
yaml.typeWriter === false
313321
) {
314322
// La désactivation de l'effet typewriter avec les backticks n'est plus nécessaire : on les supprime
315-
chatMessage.innerHTML = html.replaceAll("`", "");
323+
html = html.replaceAll("`", "");
324+
if (isUser) {
325+
chatMessage.innerHTML = sanitizeHtml(html, allowedTagsInUserInput);
326+
} else {
327+
chatMessage.innerHTML = html;
328+
}
316329
resolve();
317330
} else {
318331
typeWriter(html, chatMessage).then(() => resolve());

js/utils/strings.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,9 @@ export function hasSentenceEndMark(string) {
2525
// Vérifie si c'est une marque de fin de phrase
2626
return lastChar === "." || lastChar === "!" || lastChar === "?";
2727
}
28+
29+
export function sanitizeHtml(html, allowedTags) {
30+
return html.replace(/<[^>]+>/g, (tag) => {
31+
return allowedTags.includes(tag) ? tag : "";
32+
});
33+
}

script.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

script.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)