CGIBASHOPTS: CGI BASH Options Analyseing
CGIBASHOPTS est une petite bibliothèque de bash pure et rapide pour analyser les paramètres de formulaires Web pour les scripts CGI Web Shell Bash, même avec des téléchargements de fichiers binaires. Il est gratuit à utiliser sans restrictions (licence MIT). c) Colas Nahaboo 2017
Start
- Copiez le fichier
cgibashopts quelque part sur votre serveur. Par exemple as /usr/local/bin/cgibashopts - Profitez simplement ce fichier au début de vos scripts CGI bash. Par exemple:
source /usr/local/bin/cgibashopts ou . /usr/local/bin/cgibashopts - La valeur d'un paramètre de formulaire Web
foo (par exemple dans la page HTML: <input type=text name=foo> ) peut ensuite être trouvée comme la valeur de la variable d'environnement de la coque $FORM_foo
Dépannage:
- Si quelque chose ne va pas, exécutez
tests/tewiba -v dans le répertoire CGibashopts sur votre serveur pour voir si la suite de tests détecte un problème. - Cgibashopts nécessite les versions GNU de
bash , grep , sed . Pour tester cela, exécutez grep -P . /dev/null , vous ne devriez pas obtenir d'erreur. Si vous le faites, vous devez les installer sur des systèmes de type UNIX n'utilisant pas les utilitaires GNU par défaut, tels que MacOS , BusyBox, FreeBSD, BSD et SYSV dérivés ...- Sur macOS, voir le numéro 10
- Sur Busybox, vous devez installer les packages pour les versions GNU de
bash , coreutils , grep , sed - Sur FreeBSD, utilisez des sports frais
Caractéristiques
- Simple à utiliser: un seul fichier.
- Rapide et petit.
- Bash pur à l'exception de l'utilisation du grep, du sed et du tronqué.
- Gandes Get and Post Demandes, avec toutes les méthodes de codage des paramètres: application / x-www-form-urlencoded, multipart / form-data, texte / plaine.
- Gère également les chaînes de requête de recherche d'index hérité
- Grée le téléchargement de fichiers binaires et les fichiers texte avec UNIX ou DOS Newlines. Je n'ai trouvé aucune bibliothèque existante fournissant cette fonctionnalité pour la programmation Shell CGI
- Utilise uniquement des fonctionnalités "classiques" de bash et devrait fonctionner avec de vieilles versions bash, je suppose que 4.1+
Documentation
- Lorsqu'il est utilisé, la bibliothèque CGIBASHOPTS décode les paramètres envoyés par le navigateur que le serveur Web fournit aux scripts sous forme de différentes variables d'environnement et éventuellement son entrée standard, conformément à la norme CGI. CGIBASHOPTS les rend à la disposition du script inclus dans un formulaire facile à utiliser: variables, fonctions et fichiers.
- Pour utiliser la bibliothèque, procurez-le au début de votre script, le plus tôt possible pour éviter les conflits avec des variables que vous pourriez utiliser plus tard dans votre script.
- La bibliothèque décode les paramètres des demandes GET et POST, avec toutes les façons possibles d'encoder les paramètres (via "ENCTYPE").
- La liste des noms de paramètres est répertoriée dans
$FORMS en tant que chaîne de noms séparés par l'espace. EG: echo "$FORMS" ==> foo bar gee . Les noms de paramètres sont ceux spécifiés par l'attribut name dans les différents éléments HTML dans un formulaire HTML, ou envoyé via des commandes comme wget ou curl . Les noms de paramètres doivent être des noms de variables juridiques pour bash: caractères alphanumériques et soulignements, et ne pas commencer par un chiffre. - Les noms de paramètres non valides (par exemple: 0to60, ab, a: b, ...) sont ignorés silencieusement, ainsi que leurs valeurs
- Chaque valeur de paramètre est copiée comme la valeur d'une variable d'environnement Form_ - préfixe. EG:
$FORM_foo pour un élément de formulaire HTML nommé foo . - Les valeurs de paramètres multi-lignes sont converties en fin des lignes UNIX (une nouvelle ligne au lieu du retour du chariot et de la nouvelle ligne)
- Fichiers Téléchargements: lorsque les fichiers sont téléchargés, via des éléments de formulaire comme
<input type=file name=file1> , CGIBASHOPTS place le nom du paramètre (ici file1 ) dans la variable $ FormFiles, qui est une liste séparée de l'espace de tous les noms de paramètres de fichier reçus. Le nom réel du fichier téléchargé peut être trouvé dans la valeur de variable (ici $FORM_file1 ), tandis que le contenu du fichier peut être trouvé dans un fichier local nommé par la variable dans le répertoire $CGIBASHOPTS_DIR (ici $CGIBASHOPTS_DIR/file1 )- Seuls les fichiers téléchargés sont créés et répertoriés de cette façon. Si l'utilisateur ne sélectionne aucun fichier dans le formulaire, la variable shell ne sera pas définie ni aucun fichier créé.
- Cependant, des fichiers téléchargés vides seront créés. Ils seront vides, bien sûr.
- Les fichiers binaires et texte reçus ne seront pas convertis dans le format de texte UNIX (les lignes se terminent par une nouvelle ligne), même si le client les a téléchargés au format DOS (les lignes se terminent par un retour chariot et une nouvelle ligne). Vous devez donc être prêt à gérer les lignes DOS dans les fichiers texte téléchargés.
- AVERTISSEMENT: Une fonction de nettoyage bash
cgibashopts_clean doit être appelée à la fin de votre script pour supprimer le répertoire temporaire $CGIBASHOPTS_DIR stockant les fichiers téléchargés, si l'option -n (voir ci-dessous) n'est pas utilisée. CGIBASHOPTS fait un trap cgibashopts_clean 0 afin que cette fonction soit appelée automatiquement à la fin de votre script, afin que vous n'ayez rien à faire, sauf si vous utilisez un trap 0 vous-même, et que vous devez donc vous assurer que votre code gantant le signal de sortie appelle explicitement cgibashopts_clean .- Les cgibashopts de l'approvisionnement effaceront tout
trap 0 qui a été effectué précédemment. Alors, réglez votre piège 0 après avoir approché des cgibashopts - L'appel CGIBASHOPTS_CLEAN n'est réellement nécessaire que si votre formulaire HTML utilise des éléments d'entrée du
file de type - Dès que vous avez traité les fichiers téléchargés, vous pouvez explicitement appeler la fonction
cgibashopts_clean vous-même, afin qu'il ne soit plus nécessaire et que vous êtes libre d'utiliser des pièges comme vous le souhaitez par la suite - Si vous ne vous attendez pas à faire télécharger des fichiers, vous pouvez utiliser l'option -N (voir ci-dessous)
- Options de ligne de commande:
- -N peut être donné pour ignorer et rejeter toutes les demandes de téléchargement de fichiers. Ceci est recommandé si vous ne vous attendez pas à ce que les fichiers soient téléchargés, car cela peut enregistrer une charge informatique si un attaquant essaie de télécharger de faux fichiers, mais pas obligatoire. Il ne définit pas non plus la variable
$CGIBASHOPTS_DIR ni la fonction cgibashopts_clean , et n'utilise pas TRAP. Remarque: Ceci n'est disponible que dans les versions 3 et plus. Exemple d'utilisation : . cgibashopts -n - Le répertoire -D spécifie où CGIBASHOPTIONS gérera ses fichiers temporaires en cas de téléchargements de fichiers. Il est par défaut à
/tmp . CGIBASHOPTIONS créera $CGIBASHOPTS_DIR sous- cgibashopts-files.$$ $$
- La variable
CGIBASHOPTS_RELEASE détient la version de version, utilise le versioning sémantique (par exemple 4.0.1, 4.4.3) du libray Cgibashopts utilisé, versions répertoriées à la fin de cette page dans l'histoire des modifications ...- La variable
CGIBASHOPTS_VERSION contient le numéro de version majeur (le premier entier de CGIBASHOPTS_RELEASE ci-dessus, pour une compatibilité en arrière.
- Goodies divers:
- Deux fonctions de bash pratiques sont fournies:
-
urldecode qui prend une chaîne dans le paramètre et publie sa version décodée, transformant + dans les espaces et %XX dans le caractère du code ASCII hexadécimal xx (par exemple% 41 devient a), et la suppression des rendements du chariot. -
urlencode qui effectue le fonctionnement inverse. Les deux sont plus rapides que les commandes Linux binaires.
- Deux variables
$nl et $cr détiennent une nouvelle ligne et un caractère de retour en chariot - Un autre moyen d'obtenir les valeurs des variables est via la fonction
param . Ceci est juste une fonction de commodité compatible avec le bashlib pour les personnes (ou scripts) qui y sont utilisées.-
param sans argument sort la valeur des FORMS -
param foo produit la valeur de FORM_foo -
param foo a string... définit la valeur de FORM_foo en "a string..." -
param -f imprime $FORMFILES -
param -f foo imprime $FORMFILE_foo -
param -f foo a string... définit la valeur de FORMFILE_foo à "a string..."
Suite de tests
Une suite de test est fournie, elle peut être exécutée par ./tests/RUN-ALL-TESTS , pour plus de détails, consultez le Readme.md dans tests de répertoire
Projets l'utilisation
- Watermark-PDF un frontage Web pour un script de watermarking PDF par Pipoprods
- Recherche dans tous les projets GitHub GitHub en le faisant référence
Retour
N'hésitez pas à copier et à améliorer ce projet, ainsi qu'à fournir des rapports de bogues, des commentaires, des suggestions via:
- Création de problèmes, si vous avez un compte GitHub.
- Utilisez le formulaire de rapport GIT fourni pour créer un problème si vous n'avez pas de compte Githib.
- Créer ou participer à une discussion sur ce projet
- Ou envoyez-moi un e-mail: [email protected]
Histoire des changements
- 2023-01-11 V4.1.3: Correction de la suite de test uniquement pour éviter les bogues dans les versions bash <4.4. Le code réel CGIBASHOPTS est inchangé, pas besoin de mettre à niveau sauf pour passer la suite de tests sur les systèmes hérités.
- 2023-01-08 V4.1.2: Correction de bogues: Seuls les demi-finales ont été comprises comme des séparateurs dans les en-têtes HTTP
Content-Type et Content-Disposition . Fixé pour utiliser également des virgules. Bogue rapportée par "Florin-CTU", numéros # 8 et # 9. - 2022-11-24 V4.1.1: correction de bogue: champs de formulaire après ignorer un champ de téléchargement de fichiers. Veuillez mettre à niveau! Rapport de bogue par "PipoProds", numéro 7.
- 2021-12-23 V4.1.0:
- Cougé vers le versioning sémantique, avec de nouveaux var
CGIBASHOPTS_RELEASE - Nouvelle option -d pour spécifier le répertoire temporaire (suggestion de "Aufschlauer")
- Déplacez-vous vers GitHub: déplacez la plupart des fichiers de la vue principale, dans Tests /, Tewiba a mis à niveau vers 1.5.0, le nettoyage du code pour passer
- 2020-04-16 Version 4: fonction Goodie Urlencode ajoutée
- 2020-04-04 Quelques changements cosmétiques dans ce DOC et les tests (DIR de suite de test renommé comme tests), mais aucun changement dans le code CGIBASHOPTS lui-même, donc aucune augmentation du numéro de version.
- 2020-03-27 Version 3: Option -N Ajout pour désactiver les téléchargements de fichiers
- 2018-10-09 Version 2: Correction, les espaces dans les valeurs des paramètres peuvent être considérés comme +
- 2017-12-13 Version 1: Correction du téléchargement de fichiers avec divers types mime, la bibliothèque peut désormais être utilisée dans les scripts à l'aide de set -u et de set -e.
- Création 2017-12-07 du projet