Protéger une chaîne pour bash
Espaces, apostrophes, $, !, retours à la ligne : collez un texte et obtenez-le écrit pour que bash le lise exactement, en un seul argument. Ou l’inverse : voyez ce que bash tire d’un mot protégé.
Pour vérifier dans un terminal : printf affiche la valeur qu’il reçoit, et rien d’autre.
Laquelle choisir
'…'Apostrophes- Rien n’y est interprété, pas même
\: la plus sûre. Seule l’apostrophe ne peut pas y figurer ; elle s’écrit'\''(on ferme, apostrophe protégée, on rouvre). $'…'ANSI-C ($'…')- Comprend
\n,\t,\e,\x41… : la seule façon lisible d’écrire une tabulation ou un caractère d’échappement. Propre à bash (aussi dans zsh et ksh, pas dans sh). "…"Guillemets- Utile quand une variable doit être remplacée à l’intérieur (
"$HOME/x").\,$,`et"doivent y être protégés, et!déclenche l’expansion d’historique dans un terminal : l’outil le sort, entre'!'. \Barres obliques- Chaque caractère spécial reçoit son
\, comme le faitprintf %q. Court quand il n’y a qu’une espace ou deux ; illisible au-delà.
Transparence
Le texte est analysé et réécrit dans votre navigateur, par les scripts listés ci-dessous. Il ne quitte jamais cette page.
- Garanti par votre navigateur
- La politique de sécurité du contenu (CSP) de cette page n’autorise qu’une destination, la mesure d’audience du site (
connect-src https://stats.r-no.fr, voir plus bas), et interdit tout envoi de formulaire (form-action 'none') : même un bogue ne pourrait envoyer nulle part ce que vous saisissez. Vous pouvez lire cette politique en haut du code source de la page. - Mesure d’audience
- Comme toutes les pages du site, celle-ci compte sa visite avec Umami, installé sur le serveur de R-no lui-même (
stats.r-no.fr). Il reçoit l’adresse de la page, sans paramètres ni ancre, le site d’où vous venez (son nom de domaine seulement), votre navigateur, votre système, votre langue et la taille de votre écran, ainsi que le pays, la région et la ville déduits de votre adresse IP, qui n’est pas conservée. Il ne reçoit jamais ce que vous saisissez, ni le résultat de l’outil. Aucun cookie, rien d’enregistré dans votre navigateur ; si votre navigateur demande à ne pas être suivi (Do Not Track), rien n’est mesuré. Les données sont effacées au bout de 25 mois.- /commun/mesure.js : le filtre appliqué avant chaque envoi, écrit pour R-no Toolbox. 1.4 kB
SHA-256225eec74fd12623d82fc05ee7d222be629ce454d081c129e8d1e249ed37ee716 - https://stats.r-no.fr/m.js : le script de suivi d’Umami, libre (MIT), servi par le serveur de mesure. Son empreinte n’est pas affichée ici : elle change à chaque version d’Umami, et vous ne pouvez pas vérifier depuis votre navigateur qu’il s’agit du code publié. Pour cette partie, il faut faire confiance à R-no.
- /commun/mesure.js : le filtre appliqué avant chaque envoi, écrit pour R-no Toolbox. 1.4 kB
- Ce qui est conservé
- Aucun cookie, et rien dans l’adresse. Ce que vous saisissez n’est jamais conservé : tout disparaît quand vous rechargez ou fermez la page. La langue est donnée par l’adresse elle-même (
/en/ou/fr/) : rien n’est conservé pour s’en souvenir. Comme tout site web, le serveur note le téléchargement de la page et de ses fichiers dans ses journaux d’accès (adresse IP, date et heure, adresse demandée, nom du navigateur). Il ne reçoit jamais ce que vous saisissez. - Le code qui s’exécute ici
-
- app.js: la protection et la lecture des mots bash, écrites pour R-no Toolbox. Non minifié, sans bibliothèque tierce. 17.1 kB
SHA-256d73f0398fdd00e66799d3ea7e7a38500a31e70ecf95dea10520970537c65ab44 - textes.js: les messages en français de l’outil, affichés par son script (le reste de la page française est écrit dans son HTML à la construction du site). Il ne fait que définir des textes, sans aucune logique. 7.9 kB
SHA-25646462d5a5030c64eb623c00b180966a9a3a8fff8f352658647faf9d44960ea41 - /commun/langue.js: l’aide à la traduction, la même sur toutes les pages du site. Elle lit la langue de la page et donne à l’outil ses messages dans cette langue. Elle ne conserve rien. 1.6 kB
SHA-25680f76f69773ef628d36d09bf8387cfedebda4529210d7120649b6f5603310631
- app.js: la protection et la lecture des mots bash, écrites pour R-no Toolbox. Non minifié, sans bibliothèque tierce. 17.1 kB
- Avant de coller
- Cette page ne fait qu’écrire du texte : elle n’exécute rien, ni ici ni sur votre machine. Ce que vous collez dans un terminal ou un fichier de configuration s’exécute avec vos droits : relisez-le d’abord. Le code qu’elle écrit ne télécharge rien et n’appelle aucun service extérieur.
- Comment c’est vérifié
- Chacune des quatre formes a été passée à bash 5.2 sur des textes piégés (apostrophes,
!, retours à la ligne, caractères de contrôle, emoji) et a rendu exactement le texte d’origine. Le mode lecture applique aux guillemets et aux barres obliques les mêmes règles que bash. - Vérifiez vous-même
- Téléchargez un script et comparez son empreinte avec celle affichée ci-dessus :
curl -s https://r-no.fr/bash/quote/app.js | shasum -a 256 - Limites
- Écrit pour bash (et zsh, ksh).
sh(dash) ne connaît pas$'…'. Le mode lecture ne fait pas les expansions ($var,$(…),*,~,{a,b}) : il ne connaît ni vos variables ni vos fichiers, il les signale donc. Le caractère NUL ne peut de toute façon pas être passé à une commande. 100 000 caractères au plus.