BBCode

BBCode est un langage de balisage léger inventé pour simplifier la mise en forme des messages sur les forums de discussion internet. « BBCode » est l'abréviation de Bulletin Board Code, « bulletin board » étant le surnom anglais des forums de discussion. Le BBCode est reconnaissable au fait que ses balises sont délimitées par des crochets ([ et ]), à la différence du HTML qui utilise les chevrons (< et >).

Fonctionnement du BBCode

Balisage du texte

L'utilisateur met son texte en forme en insérant les balises BBCode prises en charge par le forum ou site internet sur lequel il écrit. Les balises BBCode sont délimitées par des crochets (« [» et «] »). Le principe est similaire à celui du langage HTML : on encadre le passage à mettre en forme avec une balise ouvrante et une balise fermante. Par exemple, dans ce message : « Albert Camus est l'auteur de [i]La Peste[/i]. », les mots « La Peste » à l'intérieur de la balise [i]...[/i] seront affichés en italique.

C'est le propriétaire du forum (ou du site) qui détermine la liste des balises BBCode disponibles et leurs noms. Contrairement au HTML, langage standardisé dans lequel les noms et la syntaxe des balises sont déterminés par une autorité centrale (le World Wide Web Consortium), il n'existe aucun standard pour le BBCode. Il n'y a que des conventions tacites. Par exemple, la balise [i] permet de mettre le texte en italique sur de nombreux sites, mais ce n'est pas une règle absolue. Plus la balise est spécifique, plus les usages ont tendance à varier. On rencontre au moins quatre noms de balises BBCode différents pour dissimuler un texte ([hide], [hidden], [spoil], [spoiler]).

En ce qui concerne la structure des balises, le BBCode suit les principes généraux des langages de balisage :

  • Toute balise ouverte doit être fermée (sauf si elle est spécifiée autofermante).

Exemple : Le texte « Ceci est un mot en [i]italique » est invalide car il manque la balise [/i] fermante.

  • Lorsque des balises sont imbriquées, elles doivent être fermées dans le bon ordre.

Exemple de syntaxe invalide : « [g][i]gras et italique[/g][/i] »
Exemple de syntaxe valide : « [g][i]gras et italique[/i][/g] »

  • Une balise peut avoir un attribut, dont la valeur est assignée par le signe égal (=).

Exemple : dans la balise « [color=red]...[/color] », la balise « color » indique que l'on veut colorer le texte et l'attribut « red » précise que l'on veut le colorer en rouge.

Affichage du texte

Une fois que le message a été envoyé au site, ce dernier doit effectuer un traitement avant de pouvoir l'afficher aux internautes. En effet, du fait de l'absence totale de standardisation du BBCode, aucun navigateur web n'est capable d'interpréter ses balises. Le site doit être doté d'un convertisseur qui transformera les balises BBCode en balises HTML, le langage universel des pages web.

Si elles sont mal réalisées, ces conversions peuvent donner lieu à des failles de sécurité (voir plus bas).

Bien que le BBCode soit très majoritairement utilisé pour produire du HTML, il peut être converti dans d'autres langages si nécessaire, par exemple en XML.

Listes de balises

Les balises BBCode les plus courantes sont les suivantes :

Fonction du BBCodeSyntaxeAperçu
Texte en gras [b]Texte[/b] Texte
Texte en italique [i]Texte[/i] Texte
Texte souligné [u]Texte[/u] Texte
Texte barré [s]Texte[/s] ou aussi [strike]Texte[/strike] Texte
Texte coloré en rouge [color=red]Texte[/color]
[color=#FF0000]Texte[/color] (avec la notation hexadécimale de la couleur)
Texte
Police du texte [font=Arial]Texte[/font] Texte
Alignement du texte [right]Texte aligné à droite[/right]

[left]Texte aligné à gauche[/left]
[center]Texte centré[/center]
[justify]Texte justifié[/justify]

Lien hypertexte [url]URL du lien[/url]

[url=URL du lien]Titre du lien[/url]

http://fr.wikipedia.org

Wikipédia

Image [img]URL de l'image[/img]
Texte cité [quote]Texte cité sans auteur[/quote]
[quote="Untel"]Texte cité de Untel[/quote]
Listes à puces [list]
[*]
Première phrase
[*]
Deuxième phrase
[/list]

Un paramètre peut être ajouté pour obtenir une liste ordonnée (ex : [list=1] numérotera automatiquement les éléments de la liste)

Texte masqué apparaissant lorsque l'on clique dessus [spoiler]Texte, image, couleur de texte, vidéo, etc[/spoiler]

Avantages

Le principal avantage du BBCode est que sa syntaxe est souvent plus concise et explicite que le HTML. La mise en forme est ainsi plus conviviale, même pour les utilisateurs non familiers avec le concept de balisage. Par exemple, comparer ces deux syntaxes pour mettre un texte en rouge :

  En BBCode : [rouge]Texte[/rouge]
  En HTML :   <span style="color:red">Texte</span>

Le BBCode permet également au webmaster de restreindre le nombre des mises en forme à disposition de ses utilisateurs. Ceci permet, d'une part, de conserver une cohérence visuelle (par exemple, la taille, la couleur et les marges des titres seront identiques) et, d'autre part, d'empêcher l'emploi de mises en forme jugées peu esthétiques (surlignement, texte clignotant, etc.).

Inconvénients

L'absence de normalisation des balises BBCode oblige l'utilisateur à s'adapter en fonction du forum ou site sur lequel il écrit. Certaines balises fonctionneront sur un site mais pas sur un autre, d'autres porteront un autre nom, ou porteront le même nom mais avec une syntaxe différente, etc. Les conflits entre noms de balises peuvent être problématiques. Par exemple, la balise [s]...[/s] signifiera « rayer le texte » sur un forum anglophone (strike) mais « souligner » sur un forum francophone, ce qui change le sens de la mise en forme.

Le BBCode pose un problème plus global d'interopérabilité. Si un webmaster change le système de gestion de contenu de son site, certaines balises utilisées dans les anciens messages risquent de ne plus fonctionner.

Sentiment erroné de sécurité

Contrairement à une idée répandue, le BBCode n'offre que peu de protection contre les injections de code malveillant. Il est vrai que le principe d'établir une liste blanche des balises autorisées empêche l'usage de balises HTML dangereuses telles que la balise <script>, qui permettrait d'exécuter du code Javascript, ou <frame>, qui inclurait une page d'un site tiers dans la page d'origine. Cependant, il ne suffit pas de maîtriser les noms des balises, il faut également contrôler la valeur de leurs attributs. Par exemple, ce BBCode destiné à insérer une image[1] :

  [img]http://sitelambda.com/image.jpg[/img]

devient normalement, après conversion en HTML :

  <img src="http://sitelambda.com/image.jpg" />

On peut tenter d'y injecter du code malveillant en fermant prématurément le guillemet (....jpg") et en ouvrant une instruction Javascript non prévue (onerror="...) :

 [img]http://sitelambda.com/image.jpg" onerror="alert{location}[/img]

Si le convertisseur se contente de récupérer le contenu de la balise sans le contrôler, il produira ce code HTML potentiellement dangereux :

  <img src="http://sitelambda.com/image.jpg" onerror="alert{location}" />

On voit ici que du code nuisible a pu être injecté sans avoir besoin de recourir à une balise non autorisée. En outre, la faille de sécurité est ouverte par une balise qui semble à première vue inoffensive (insertion d'une image). Cette faille provient de l'absence de filtrage des données. Dans cet exemple, le convertisseur aurait dû s'assurer que la balise [img] ne contient qu'une url. Le niveau de sécurité dépendra ensuite du niveau de tolérance du filtre : a minima, il devrait contrôler que l'adresse commence par « http:// » et ne contient pas d'espace ; la sécurité peut être renforcée en vérifiant, par exemple, que l'extension du fichier ciblé correspond bien à une image (JPEG, PNG, GIF...).

Seule la mise en place de procédures de filtrage du texte envoyé assure réellement la sécurité. L'existence ou non de ce filtrage étant indépendante du format des données de départ, un texte formaté en BBCode peut tout à fait contenir du code malveillant et, inversement, l'utilisateur peut être autorisé à saisir des balises HTML sans que cela crée pour autant de faille de sécurité.

Recul

Dans le contexte du Web 2.0, de nouveaux langages de balisage simplifié ont émergé. On peut citer les XBBCodes, qui valorisent le contenu de façon sémantique, et les Wikicodes, qui autorisent des mises en forme très élaborées.

Toutefois, tous les langages de balisage simplifié sont concurrencés par les éditeurs WYSIWYG, qui permettent à l'utilisateur de voir la mise en forme réelle de son texte sans aucune balise apparente, à la manière d'un logiciel de traitement de texte. Un balisage est toujours présent mais, étant géré par un programme et non plus par l'utilisateur, il n'est plus nécessaire de le simplifier au moyen d'un BBCode.

Le principe même de mise en forme des messages a tendance à reculer depuis les années 2010. Notamment, Facebook, site de réseautage social le plus fréquenté revendiquant 2 milliards de comptes actifs en 2017[2], n'affichait jusqu'en 2019 aucune option de mise en forme des messages[3]. On peut citer comme raisons la tendance générale à la simplification des interfaces, la préférence pour la rapidité des réactions et des échanges et le fait que la navigation sur un support mobile et tactile (smartphone, tablette) rend la mise en forme malaisée.

Notes et références

  1. Exemple inspiré de kotowicz.net.
  2. Renald Boulestin, « Facebook aligne deux milliards d'utilisateurs actifs. Quid des autres réseaux sociaux ? », sur itespresso.fr, (consulté le ).
  3. Comment mettre en forme vos publications Facebook professionnelles ? sur Leptidigital.fr.

Voir aussi

Articles connexes

Liens externes

Implementations
Implementations PHP
  • Portail d’Internet
  • Portail de l’informatique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.